|
| 1 | +package main |
| 2 | + |
| 3 | +import ( |
| 4 | + "os" |
| 5 | + "path/filepath" |
| 6 | + |
| 7 | + "github.com/go-analyze/charts" |
| 8 | +) |
| 9 | + |
| 10 | +/* |
| 11 | +Example bar chart with a variety of basic configuration options shown using the Painter API. |
| 12 | +*/ |
| 13 | + |
| 14 | +func writeFile(buf []byte) error { |
| 15 | + tmpPath := "./tmp" |
| 16 | + if err := os.MkdirAll(tmpPath, 0700); err != nil { |
| 17 | + return err |
| 18 | + } |
| 19 | + |
| 20 | + file := filepath.Join(tmpPath, "bar-chart-2.png") |
| 21 | + return os.WriteFile(file, buf, 0600) |
| 22 | +} |
| 23 | + |
| 24 | +func main() { |
| 25 | + values := [][]float64{ |
| 26 | + {2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3}, |
| 27 | + {2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3}, |
| 28 | + } |
| 29 | + |
| 30 | + opt := charts.BarChartOption{} |
| 31 | + opt.SeriesList = charts.NewSeriesListDataFromValues(values, charts.ChartTypeBar) |
| 32 | + opt.XAxis.Data = []string{ |
| 33 | + "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", |
| 34 | + } |
| 35 | + opt.XAxis.LabelCount = 12 // force label count due to the labels being very close |
| 36 | + opt.Legend = charts.LegendOption{ |
| 37 | + Data: []string{"Rainfall", "Evaporation"}, |
| 38 | + Offset: charts.OffsetRight, |
| 39 | + OverlayChart: charts.True(), |
| 40 | + } |
| 41 | + opt.SeriesList[0].MarkLine = charts.NewMarkLine(charts.SeriesMarkDataTypeAverage) |
| 42 | + opt.SeriesList[0].MarkPoint = charts.NewMarkPoint( |
| 43 | + charts.SeriesMarkDataTypeMax, |
| 44 | + charts.SeriesMarkDataTypeMin, |
| 45 | + ) |
| 46 | + opt.SeriesList[1].MarkLine = charts.NewMarkLine(charts.SeriesMarkDataTypeAverage) |
| 47 | + opt.SeriesList[1].MarkPoint = charts.NewMarkPoint( |
| 48 | + charts.SeriesMarkDataTypeMax, |
| 49 | + charts.SeriesMarkDataTypeMin, |
| 50 | + ) |
| 51 | + |
| 52 | + p, err := charts.NewPainter(charts.PainterOptions{ |
| 53 | + OutputFormat: charts.ChartOutputPNG, |
| 54 | + Width: 600, |
| 55 | + Height: 400, |
| 56 | + }) |
| 57 | + if err != nil { |
| 58 | + panic(err) |
| 59 | + } |
| 60 | + if _, err = charts.NewBarChart(p, opt).Render(); err != nil { |
| 61 | + panic(err) |
| 62 | + } |
| 63 | + |
| 64 | + if buf, err := p.Bytes(); err != nil { |
| 65 | + panic(err) |
| 66 | + } else if err = writeFile(buf); err != nil { |
| 67 | + panic(err) |
| 68 | + } |
| 69 | +} |
0 commit comments