refactor: enhance chart render function
This commit is contained in:
parent
65a1cb11ad
commit
38c4978e44
20 changed files with 665 additions and 462 deletions
|
|
@ -24,26 +24,39 @@ func writeFile(buf []byte) error {
|
|||
}
|
||||
|
||||
func main() {
|
||||
p, err := charts.NewPainter(charts.PainterOptions{
|
||||
Width: 800,
|
||||
Height: 600,
|
||||
Type: charts.ChartOutputPNG,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
values := [][]float64{
|
||||
{
|
||||
2.0,
|
||||
4.9,
|
||||
7.0,
|
||||
23.2,
|
||||
25.6,
|
||||
76.7,
|
||||
135.6,
|
||||
162.2,
|
||||
32.6,
|
||||
20.0,
|
||||
6.4,
|
||||
3.3,
|
||||
},
|
||||
{
|
||||
2.6,
|
||||
5.9,
|
||||
9.0,
|
||||
26.4,
|
||||
28.7,
|
||||
70.7,
|
||||
175.6,
|
||||
182.2,
|
||||
48.7,
|
||||
18.8,
|
||||
6.0,
|
||||
2.3,
|
||||
},
|
||||
}
|
||||
_, err = charts.NewBarChart(p, charts.BarChartOption{
|
||||
Title: charts.TitleOption{
|
||||
Text: "Rainfall vs Evaporation",
|
||||
Subtext: "Fake Data",
|
||||
},
|
||||
Padding: charts.Box{
|
||||
Top: 20,
|
||||
Right: 20,
|
||||
Bottom: 20,
|
||||
Left: 20,
|
||||
},
|
||||
XAxis: charts.NewXAxisOption([]string{
|
||||
p, err := charts.BarRender(
|
||||
values,
|
||||
charts.XAxisDataOptionFunc([]string{
|
||||
"Jan",
|
||||
"Feb",
|
||||
"Mar",
|
||||
|
|
@ -57,61 +70,24 @@ func main() {
|
|||
"Nov",
|
||||
"Dec",
|
||||
}),
|
||||
Legend: charts.NewLegendOption([]string{
|
||||
charts.LegendLabelsOptionFunc([]string{
|
||||
"Rainfall",
|
||||
"Evaporation",
|
||||
}, charts.PositionRight),
|
||||
SeriesList: []charts.Series{
|
||||
{
|
||||
Type: charts.ChartTypeBar,
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
2.0,
|
||||
4.9,
|
||||
7.0,
|
||||
23.2,
|
||||
25.6,
|
||||
76.7,
|
||||
135.6,
|
||||
162.2,
|
||||
32.6,
|
||||
20.0,
|
||||
6.4,
|
||||
3.3,
|
||||
}),
|
||||
MarkPoint: charts.NewMarkPoint(
|
||||
charts.SeriesMarkDataTypeMax,
|
||||
charts.SeriesMarkDataTypeMin,
|
||||
),
|
||||
MarkLine: charts.NewMarkLine(
|
||||
charts.SeriesMarkDataTypeAverage,
|
||||
),
|
||||
},
|
||||
{
|
||||
Type: charts.ChartTypeBar,
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
2.6,
|
||||
5.9,
|
||||
9.0,
|
||||
26.4,
|
||||
28.7,
|
||||
70.7,
|
||||
175.6,
|
||||
182.2,
|
||||
48.7,
|
||||
18.8,
|
||||
6.0,
|
||||
2.3,
|
||||
}),
|
||||
MarkPoint: charts.NewMarkPoint(
|
||||
charts.SeriesMarkDataTypeMax,
|
||||
charts.SeriesMarkDataTypeMin,
|
||||
),
|
||||
MarkLine: charts.NewMarkLine(
|
||||
charts.SeriesMarkDataTypeAverage,
|
||||
),
|
||||
},
|
||||
charts.MarkLineOptionFunc(0, charts.SeriesMarkDataTypeAverage),
|
||||
charts.MarkPointOptionFunc(0, charts.SeriesMarkDataTypeMax,
|
||||
charts.SeriesMarkDataTypeMin),
|
||||
// custom option func
|
||||
func(opt *charts.ChartOption) {
|
||||
opt.SeriesList[1].MarkPoint = charts.NewMarkPoint(
|
||||
charts.SeriesMarkDataTypeMax,
|
||||
charts.SeriesMarkDataTypeMin,
|
||||
)
|
||||
opt.SeriesList[1].MarkLine = charts.NewMarkLine(
|
||||
charts.SeriesMarkDataTypeAverage,
|
||||
)
|
||||
},
|
||||
}).Render()
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ func handler(w http.ResponseWriter, req *http.Request, chartOptions []charts.Cha
|
|||
bytesList := make([][]byte, 0)
|
||||
for _, opt := range chartOptions {
|
||||
opt.Theme = theme
|
||||
opt.Type = charts.ChartOutputSVG
|
||||
d, err := charts.Render(opt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
|
@ -1055,6 +1056,64 @@ func echartsHandler(w http.ResponseWriter, req *http.Request) {
|
|||
}
|
||||
]
|
||||
}`,
|
||||
`{
|
||||
"title": {
|
||||
"text": "World Population"
|
||||
},
|
||||
"tooltip": {
|
||||
"trigger": "axis",
|
||||
"axisPointer": {
|
||||
"type": "shadow"
|
||||
}
|
||||
},
|
||||
"legend": {},
|
||||
"grid": {
|
||||
"left": "3%",
|
||||
"right": "4%",
|
||||
"bottom": "3%",
|
||||
"containLabel": true
|
||||
},
|
||||
"xAxis": {
|
||||
"type": "value"
|
||||
},
|
||||
"yAxis": {
|
||||
"type": "category",
|
||||
"data": [
|
||||
"Brazil",
|
||||
"Indonesia",
|
||||
"USA",
|
||||
"India",
|
||||
"China",
|
||||
"World"
|
||||
]
|
||||
},
|
||||
"series": [
|
||||
{
|
||||
"name": "2011",
|
||||
"type": "bar",
|
||||
"data": [
|
||||
18203,
|
||||
23489,
|
||||
29034,
|
||||
104970,
|
||||
131744,
|
||||
630230
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "2012",
|
||||
"type": "bar",
|
||||
"data": [
|
||||
19325,
|
||||
23438,
|
||||
31000,
|
||||
121594,
|
||||
134141,
|
||||
681807
|
||||
]
|
||||
}
|
||||
]
|
||||
}`,
|
||||
`{
|
||||
"title": {
|
||||
"text": "Rainfall vs Evaporation",
|
||||
|
|
|
|||
|
|
@ -24,64 +24,24 @@ func writeFile(buf []byte) error {
|
|||
}
|
||||
|
||||
func main() {
|
||||
p, err := charts.NewPainter(charts.PainterOptions{
|
||||
Width: 800,
|
||||
Height: 600,
|
||||
Type: charts.ChartOutputPNG,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
values := []float64{
|
||||
100,
|
||||
80,
|
||||
60,
|
||||
40,
|
||||
20,
|
||||
}
|
||||
_, err = charts.NewFunnelChart(p, charts.FunnelChartOption{
|
||||
Title: charts.TitleOption{
|
||||
Text: "Funnel",
|
||||
},
|
||||
Legend: charts.NewLegendOption([]string{
|
||||
p, err := charts.FunnelRender(
|
||||
values,
|
||||
charts.TitleTextOptionFunc("Funnel"),
|
||||
charts.LegendLabelsOptionFunc([]string{
|
||||
"Show",
|
||||
"Click",
|
||||
"Visit",
|
||||
"Inquiry",
|
||||
"Order",
|
||||
}),
|
||||
SeriesList: []charts.Series{
|
||||
|
||||
{
|
||||
Type: charts.ChartTypeFunnel,
|
||||
Name: "Show",
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
100,
|
||||
}),
|
||||
},
|
||||
{
|
||||
Type: charts.ChartTypeFunnel,
|
||||
Name: "Click",
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
80,
|
||||
}),
|
||||
},
|
||||
{
|
||||
Type: charts.ChartTypeFunnel,
|
||||
Name: "Visit",
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
60,
|
||||
}),
|
||||
},
|
||||
{
|
||||
Type: charts.ChartTypeFunnel,
|
||||
Name: "Inquiry",
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
40,
|
||||
}),
|
||||
},
|
||||
{
|
||||
Type: charts.ChartTypeFunnel,
|
||||
Name: "Order",
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
20,
|
||||
}),
|
||||
},
|
||||
},
|
||||
}).Render()
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,29 +24,38 @@ func writeFile(buf []byte) error {
|
|||
}
|
||||
|
||||
func main() {
|
||||
p, err := charts.NewPainter(charts.PainterOptions{
|
||||
Width: 800,
|
||||
Height: 600,
|
||||
Type: charts.ChartOutputPNG,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
_, err = charts.NewHorizontalBarChart(p, charts.HorizontalBarChartOption{
|
||||
Title: charts.TitleOption{
|
||||
Text: "World Population",
|
||||
values := [][]float64{
|
||||
{
|
||||
18203,
|
||||
23489,
|
||||
29034,
|
||||
104970,
|
||||
131744,
|
||||
630230,
|
||||
},
|
||||
Padding: charts.Box{
|
||||
{
|
||||
19325,
|
||||
23438,
|
||||
31000,
|
||||
121594,
|
||||
134141,
|
||||
681807,
|
||||
},
|
||||
}
|
||||
p, err := charts.HorizontalBarRender(
|
||||
values,
|
||||
charts.TitleTextOptionFunc("World Population"),
|
||||
charts.PaddingOptionFunc(charts.Box{
|
||||
Top: 20,
|
||||
Right: 40,
|
||||
Bottom: 20,
|
||||
Left: 20,
|
||||
},
|
||||
Legend: charts.NewLegendOption([]string{
|
||||
}),
|
||||
charts.LegendLabelsOptionFunc([]string{
|
||||
"2011",
|
||||
"2012",
|
||||
}),
|
||||
YAxisOptions: charts.NewYAxisOptions([]string{
|
||||
charts.YAxisDataOptionFunc([]string{
|
||||
"Brazil",
|
||||
"Indonesia",
|
||||
"USA",
|
||||
|
|
@ -54,31 +63,7 @@ func main() {
|
|||
"China",
|
||||
"World",
|
||||
}),
|
||||
SeriesList: []charts.Series{
|
||||
{
|
||||
Type: charts.ChartTypeHorizontalBar,
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
18203,
|
||||
23489,
|
||||
29034,
|
||||
104970,
|
||||
131744,
|
||||
630230,
|
||||
}),
|
||||
},
|
||||
{
|
||||
Type: charts.ChartTypeHorizontalBar,
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
19325,
|
||||
23438,
|
||||
31000,
|
||||
121594,
|
||||
134141,
|
||||
681807,
|
||||
}),
|
||||
},
|
||||
},
|
||||
}).Render()
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,35 +24,57 @@ func writeFile(buf []byte) error {
|
|||
}
|
||||
|
||||
func main() {
|
||||
p, err := charts.NewPainter(charts.PainterOptions{
|
||||
Width: 800,
|
||||
Height: 600,
|
||||
Type: charts.ChartOutputPNG,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
values := [][]float64{
|
||||
{
|
||||
120,
|
||||
132,
|
||||
101,
|
||||
134,
|
||||
90,
|
||||
230,
|
||||
210,
|
||||
},
|
||||
{
|
||||
220,
|
||||
182,
|
||||
191,
|
||||
234,
|
||||
290,
|
||||
330,
|
||||
310,
|
||||
},
|
||||
{
|
||||
150,
|
||||
232,
|
||||
201,
|
||||
154,
|
||||
190,
|
||||
330,
|
||||
410,
|
||||
},
|
||||
{
|
||||
320,
|
||||
332,
|
||||
301,
|
||||
334,
|
||||
390,
|
||||
330,
|
||||
320,
|
||||
},
|
||||
{
|
||||
820,
|
||||
932,
|
||||
901,
|
||||
934,
|
||||
1290,
|
||||
1330,
|
||||
1320,
|
||||
},
|
||||
}
|
||||
_, err = charts.NewLineChart(p, charts.LineChartOption{
|
||||
Padding: charts.Box{
|
||||
Left: 10,
|
||||
Top: 10,
|
||||
Right: 10,
|
||||
Bottom: 10,
|
||||
},
|
||||
Title: charts.TitleOption{
|
||||
Text: "Line",
|
||||
},
|
||||
Legend: charts.LegendOption{
|
||||
Data: []string{
|
||||
"Email",
|
||||
"Union Ads",
|
||||
"Video Ads",
|
||||
"Direct",
|
||||
"Search Engine",
|
||||
},
|
||||
Left: charts.PositionCenter,
|
||||
},
|
||||
XAxis: charts.NewXAxisOption([]string{
|
||||
p, err := charts.LineRender(
|
||||
values,
|
||||
charts.TitleTextOptionFunc("Line"),
|
||||
charts.XAxisDataOptionFunc([]string{
|
||||
"Mon",
|
||||
"Tue",
|
||||
"Wed",
|
||||
|
|
@ -61,54 +83,15 @@ func main() {
|
|||
"Sat",
|
||||
"Sun",
|
||||
}),
|
||||
SeriesList: charts.SeriesList{
|
||||
charts.NewSeriesFromValues([]float64{
|
||||
120,
|
||||
132,
|
||||
101,
|
||||
134,
|
||||
90,
|
||||
230,
|
||||
210,
|
||||
}),
|
||||
charts.NewSeriesFromValues([]float64{
|
||||
220,
|
||||
182,
|
||||
191,
|
||||
234,
|
||||
290,
|
||||
330,
|
||||
310,
|
||||
}),
|
||||
charts.NewSeriesFromValues([]float64{
|
||||
150,
|
||||
232,
|
||||
201,
|
||||
154,
|
||||
190,
|
||||
330,
|
||||
410,
|
||||
}),
|
||||
charts.NewSeriesFromValues([]float64{
|
||||
320,
|
||||
332,
|
||||
301,
|
||||
334,
|
||||
390,
|
||||
330,
|
||||
320,
|
||||
}),
|
||||
charts.NewSeriesFromValues([]float64{
|
||||
820,
|
||||
932,
|
||||
901,
|
||||
934,
|
||||
1290,
|
||||
1330,
|
||||
1320,
|
||||
}),
|
||||
},
|
||||
}).Render()
|
||||
charts.LegendLabelsOptionFunc([]string{
|
||||
"Email",
|
||||
"Union Ads",
|
||||
"Video Ads",
|
||||
"Direct",
|
||||
"Search Engine",
|
||||
}, charts.PositionCenter),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,27 +24,27 @@ func writeFile(buf []byte) error {
|
|||
}
|
||||
|
||||
func main() {
|
||||
p, err := charts.NewPainter(charts.PainterOptions{
|
||||
Width: 800,
|
||||
Height: 600,
|
||||
Type: charts.ChartOutputPNG,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
values := []float64{
|
||||
1048,
|
||||
735,
|
||||
580,
|
||||
484,
|
||||
300,
|
||||
}
|
||||
_, err = charts.NewPieChart(p, charts.PieChartOption{
|
||||
Title: charts.TitleOption{
|
||||
p, err := charts.PieRender(
|
||||
values,
|
||||
charts.TitleOptionFunc(charts.TitleOption{
|
||||
Text: "Rainfall vs Evaporation",
|
||||
Subtext: "Fake Data",
|
||||
Left: charts.PositionCenter,
|
||||
},
|
||||
Padding: charts.Box{
|
||||
}),
|
||||
charts.PaddingOptionFunc(charts.Box{
|
||||
Top: 20,
|
||||
Right: 20,
|
||||
Bottom: 20,
|
||||
Left: 20,
|
||||
},
|
||||
Legend: charts.LegendOption{
|
||||
}),
|
||||
charts.LegendOptionFunc(charts.LegendOption{
|
||||
Orient: charts.OrientVertical,
|
||||
Data: []string{
|
||||
"Search Engine",
|
||||
|
|
@ -54,20 +54,9 @@ func main() {
|
|||
"Video Ads",
|
||||
},
|
||||
Left: charts.PositionLeft,
|
||||
},
|
||||
SeriesList: charts.NewPieSeriesList([]float64{
|
||||
1048,
|
||||
735,
|
||||
580,
|
||||
484,
|
||||
300,
|
||||
}, charts.PieSeriesOption{
|
||||
Label: charts.SeriesLabel{
|
||||
Show: true,
|
||||
},
|
||||
Radius: "35%",
|
||||
}),
|
||||
}).Render()
|
||||
charts.PieSeriesShowLabel(),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,79 +24,47 @@ func writeFile(buf []byte) error {
|
|||
}
|
||||
|
||||
func main() {
|
||||
p, err := charts.NewPainter(charts.PainterOptions{
|
||||
Width: 800,
|
||||
Height: 600,
|
||||
Type: charts.ChartOutputPNG,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
values := [][]float64{
|
||||
{
|
||||
4200,
|
||||
3000,
|
||||
20000,
|
||||
35000,
|
||||
50000,
|
||||
18000,
|
||||
},
|
||||
{
|
||||
5000,
|
||||
14000,
|
||||
28000,
|
||||
26000,
|
||||
42000,
|
||||
21000,
|
||||
},
|
||||
}
|
||||
_, err = charts.NewRadarChart(p, charts.RadarChartOption{
|
||||
Padding: charts.Box{
|
||||
Left: 10,
|
||||
Top: 10,
|
||||
Right: 10,
|
||||
Bottom: 10,
|
||||
},
|
||||
Title: charts.TitleOption{
|
||||
Text: "Basic Radar Chart",
|
||||
},
|
||||
Legend: charts.NewLegendOption([]string{
|
||||
p, err := charts.RadarRender(
|
||||
values,
|
||||
charts.TitleTextOptionFunc("Basic Radar Chart"),
|
||||
charts.LegendLabelsOptionFunc([]string{
|
||||
"Allocated Budget",
|
||||
"Actual Spending",
|
||||
}),
|
||||
RadarIndicators: []charts.RadarIndicator{
|
||||
{
|
||||
Name: "Sales",
|
||||
Max: 6500,
|
||||
},
|
||||
{
|
||||
Name: "Administration",
|
||||
Max: 16000,
|
||||
},
|
||||
{
|
||||
Name: "Information Technology",
|
||||
Max: 30000,
|
||||
},
|
||||
{
|
||||
Name: "Customer Support",
|
||||
Max: 38000,
|
||||
},
|
||||
{
|
||||
Name: "Development",
|
||||
Max: 52000,
|
||||
},
|
||||
{
|
||||
Name: "Marketing",
|
||||
Max: 25000,
|
||||
},
|
||||
},
|
||||
SeriesList: charts.SeriesList{
|
||||
{
|
||||
Type: charts.ChartTypeRadar,
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
4200,
|
||||
3000,
|
||||
20000,
|
||||
35000,
|
||||
50000,
|
||||
18000,
|
||||
}),
|
||||
},
|
||||
{
|
||||
Type: charts.ChartTypeRadar,
|
||||
Data: charts.NewSeriesDataFromValues([]float64{
|
||||
5000,
|
||||
14000,
|
||||
28000,
|
||||
26000,
|
||||
42000,
|
||||
21000,
|
||||
}),
|
||||
},
|
||||
},
|
||||
}).Render()
|
||||
charts.RadarIndicatorOptionFunc([]string{
|
||||
"Sales",
|
||||
"Administration",
|
||||
"Information Technology",
|
||||
"Customer Support",
|
||||
"Development",
|
||||
"Marketing",
|
||||
}, []float64{
|
||||
6500,
|
||||
16000,
|
||||
30000,
|
||||
38000,
|
||||
52000,
|
||||
25000,
|
||||
}),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue