@@ -9,57 +9,62 @@ import (
9
9
10
10
// This section defines the currently supported chart types.
11
11
const (
12
- Bar = "bar"
13
- Bar3D = "bar3D"
14
- Doughnut = "doughnut"
15
- Line = "line"
16
- Pie = "pie"
17
- Pie3D = "pie3D"
18
- Radar = "radar"
19
- Scatter = "scatter"
12
+ Bar = "bar"
13
+ BarStacked = "barStacked"
14
+ Bar3D = "bar3D"
15
+ Doughnut = "doughnut"
16
+ Line = "line"
17
+ Pie = "pie"
18
+ Pie3D = "pie3D"
19
+ Radar = "radar"
20
+ Scatter = "scatter"
20
21
)
21
22
22
23
// This section defines the default value of chart properties.
23
24
var (
24
25
chartView3DRotX = map [string ]int {
25
- Bar : 0 ,
26
- Bar3D : 15 ,
27
- Doughnut : 0 ,
28
- Line : 0 ,
29
- Pie : 0 ,
30
- Pie3D : 30 ,
31
- Radar : 0 ,
32
- Scatter : 0 ,
26
+ Bar : 0 ,
27
+ BarStacked : 0 ,
28
+ Bar3D : 15 ,
29
+ Doughnut : 0 ,
30
+ Line : 0 ,
31
+ Pie : 0 ,
32
+ Pie3D : 30 ,
33
+ Radar : 0 ,
34
+ Scatter : 0 ,
33
35
}
34
36
chartView3DRotY = map [string ]int {
35
- Bar : 0 ,
36
- Bar3D : 20 ,
37
- Doughnut : 0 ,
38
- Line : 0 ,
39
- Pie : 0 ,
40
- Pie3D : 0 ,
41
- Radar : 0 ,
42
- Scatter : 0 ,
37
+ Bar : 0 ,
38
+ BarStacked : 0 ,
39
+ Bar3D : 20 ,
40
+ Doughnut : 0 ,
41
+ Line : 0 ,
42
+ Pie : 0 ,
43
+ Pie3D : 0 ,
44
+ Radar : 0 ,
45
+ Scatter : 0 ,
43
46
}
44
47
chartView3DDepthPercent = map [string ]int {
45
- Bar : 100 ,
46
- Bar3D : 100 ,
47
- Doughnut : 100 ,
48
- Line : 100 ,
49
- Pie : 100 ,
50
- Pie3D : 100 ,
51
- Radar : 100 ,
52
- Scatter : 100 ,
48
+ Bar : 100 ,
49
+ BarStacked : 100 ,
50
+ Bar3D : 100 ,
51
+ Doughnut : 100 ,
52
+ Line : 100 ,
53
+ Pie : 100 ,
54
+ Pie3D : 100 ,
55
+ Radar : 100 ,
56
+ Scatter : 100 ,
53
57
}
54
58
chartView3DRAngAx = map [string ]int {
55
- Bar : 0 ,
56
- Bar3D : 1 ,
57
- Doughnut : 0 ,
58
- Line : 0 ,
59
- Pie : 0 ,
60
- Pie3D : 0 ,
61
- Radar : 0 ,
62
- Scatter : 0 }
59
+ Bar : 0 ,
60
+ BarStacked : 0 ,
61
+ Bar3D : 1 ,
62
+ Doughnut : 0 ,
63
+ Line : 0 ,
64
+ Pie : 0 ,
65
+ Pie3D : 0 ,
66
+ Radar : 0 ,
67
+ Scatter : 0 }
63
68
chartLegendPosition = map [string ]string {
64
69
"bottom" : "b" ,
65
70
"left" : "l" ,
@@ -128,16 +133,17 @@ func parseFormatChartSet(formatSet string) *formatChart {
128
133
//
129
134
// The following shows the type of chart supported by excelize:
130
135
//
131
- // Type | Chart
132
- // ----------+----------------
133
- // bar | bar chart
134
- // bar3D | 3D bar chart
135
- // doughnut | doughnut chart
136
- // line | line chart
137
- // pie | pie chart
138
- // pie3D | 3D pie chart
139
- // radar | radar chart
140
- // scatter | scatter chart
136
+ // Type | Chart
137
+ // ------------+----------------
138
+ // bar | bar chart
139
+ // barStacked | stacked bar chart
140
+ // bar3D | 3D bar chart
141
+ // doughnut | doughnut chart
142
+ // line | line chart
143
+ // pie | pie chart
144
+ // pie3D | 3D pie chart
145
+ // radar | radar chart
146
+ // scatter | scatter chart
141
147
//
142
148
// In Excel a chart series is a collection of information that defines which data is plotted such as values, axis labels and formatting.
143
149
//
@@ -383,14 +389,15 @@ func (f *File) addChart(formatSet *formatChart) {
383
389
},
384
390
}
385
391
plotAreaFunc := map [string ]func (* formatChart ) * cPlotArea {
386
- Bar : f .drawBarChart ,
387
- Bar3D : f .drawBarChart ,
388
- Doughnut : f .drawDoughnutChart ,
389
- Line : f .drawLineChart ,
390
- Pie3D : f .drawPie3DChart ,
391
- Pie : f .drawPieChart ,
392
- Radar : f .drawRadarChart ,
393
- Scatter : f .drawScatterChart ,
392
+ Bar : f .drawBarChart ,
393
+ BarStacked : f .drawBarChart ,
394
+ Bar3D : f .drawBarChart ,
395
+ Doughnut : f .drawDoughnutChart ,
396
+ Line : f .drawLineChart ,
397
+ Pie3D : f .drawPie3DChart ,
398
+ Pie : f .drawPieChart ,
399
+ Radar : f .drawRadarChart ,
400
+ Scatter : f .drawScatterChart ,
394
401
}
395
402
xlsxChartSpace .Chart .PlotArea = plotAreaFunc [formatSet.Type ](formatSet )
396
403
@@ -399,7 +406,7 @@ func (f *File) addChart(formatSet *formatChart) {
399
406
f .saveFileList (media , string (chart ))
400
407
}
401
408
402
- // drawBarChart provides function to draw the c:plotArea element for bar and
409
+ // drawBarChart provides function to draw the c:plotArea element for bar, barStacked and
403
410
// bar3D chart by given format sets.
404
411
func (f * File ) drawBarChart (formatSet * formatChart ) * cPlotArea {
405
412
c := cCharts {
@@ -419,16 +426,27 @@ func (f *File) drawBarChart(formatSet *formatChart) *cPlotArea {
419
426
{Val : 753999904 },
420
427
},
421
428
}
429
+ if formatSet .Type == "barStacked" {
430
+ c .Grouping .Val = "stacked"
431
+ c .Overlap = & attrValInt {Val : 100 }
432
+ }
433
+ catAx := f .drawPlotAreaCatAx ()
434
+ valAx := f .drawPlotAreaValAx ()
422
435
charts := map [string ]* cPlotArea {
423
436
"bar" : {
424
437
BarChart : & c ,
425
- CatAx : f .drawPlotAreaCatAx (),
426
- ValAx : f .drawPlotAreaValAx (),
438
+ CatAx : catAx ,
439
+ ValAx : valAx ,
440
+ },
441
+ "barStacked" : {
442
+ BarChart : & c ,
443
+ CatAx : catAx ,
444
+ ValAx : valAx ,
427
445
},
428
446
"bar3D" : {
429
447
Bar3DChart : & c ,
430
- CatAx : f . drawPlotAreaCatAx () ,
431
- ValAx : f . drawPlotAreaValAx () ,
448
+ CatAx : catAx ,
449
+ ValAx : valAx ,
432
450
},
433
451
}
434
452
return charts [formatSet .Type ]
@@ -590,7 +608,7 @@ func (f *File) drawChartSeriesSpPr(i int, formatSet *formatChart) *cSpPr {
590
608
},
591
609
},
592
610
}
593
- chartSeriesSpPr := map [string ]* cSpPr {Bar : nil , Bar3D : nil , Doughnut : nil , Line : spPrLine , Pie : nil , Pie3D : nil , Radar : nil , Scatter : spPrScatter }
611
+ chartSeriesSpPr := map [string ]* cSpPr {Bar : nil , BarStacked : nil , Bar3D : nil , Doughnut : nil , Line : spPrLine , Pie : nil , Pie3D : nil , Radar : nil , Scatter : spPrScatter }
594
612
return chartSeriesSpPr [formatSet .Type ]
595
613
}
596
614
@@ -619,7 +637,7 @@ func (f *File) drawChartSeriesDPt(i int, formatSet *formatChart) []*cDPt {
619
637
},
620
638
},
621
639
}}
622
- chartSeriesDPt := map [string ][]* cDPt {Bar : nil , Bar3D : nil , Doughnut : nil , Line : nil , Pie : dpt , Pie3D : dpt , Radar : nil , Scatter : nil }
640
+ chartSeriesDPt := map [string ][]* cDPt {Bar : nil , BarStacked : nil , Bar3D : nil , Doughnut : nil , Line : nil , Pie : dpt , Pie3D : dpt , Radar : nil , Scatter : nil }
623
641
return chartSeriesDPt [formatSet .Type ]
624
642
}
625
643
@@ -631,7 +649,7 @@ func (f *File) drawChartSeriesCat(v formatChartSeries, formatSet *formatChart) *
631
649
F : v .Categories ,
632
650
},
633
651
}
634
- chartSeriesCat := map [string ]* cCat {Bar : cat , Bar3D : cat , Doughnut : cat , Line : cat , Pie : cat , Pie3D : cat , Radar : cat , Scatter : nil }
652
+ chartSeriesCat := map [string ]* cCat {Bar : cat , BarStacked : cat , Bar3D : cat , Doughnut : cat , Line : cat , Pie : cat , Pie3D : cat , Radar : cat , Scatter : nil }
635
653
return chartSeriesCat [formatSet .Type ]
636
654
}
637
655
@@ -643,7 +661,7 @@ func (f *File) drawChartSeriesVal(v formatChartSeries, formatSet *formatChart) *
643
661
F : v .Values ,
644
662
},
645
663
}
646
- chartSeriesVal := map [string ]* cVal {Bar : val , Bar3D : val , Doughnut : val , Line : val , Pie : val , Pie3D : val , Radar : val , Scatter : nil }
664
+ chartSeriesVal := map [string ]* cVal {Bar : val , BarStacked : val , Bar3D : val , Doughnut : val , Line : val , Pie : val , Pie3D : val , Radar : val , Scatter : nil }
647
665
return chartSeriesVal [formatSet .Type ]
648
666
}
649
667
@@ -669,7 +687,7 @@ func (f *File) drawChartSeriesMarker(i int, formatSet *formatChart) *cMarker {
669
687
},
670
688
},
671
689
}
672
- chartSeriesMarker := map [string ]* cMarker {Bar : nil , Bar3D : nil , Doughnut : nil , Line : nil , Pie : nil , Pie3D : nil , Radar : nil , Scatter : marker }
690
+ chartSeriesMarker := map [string ]* cMarker {Bar : nil , BarStacked : nil , Bar3D : nil , Doughnut : nil , Line : nil , Pie : nil , Pie3D : nil , Radar : nil , Scatter : marker }
673
691
return chartSeriesMarker [formatSet .Type ]
674
692
}
675
693
@@ -681,7 +699,7 @@ func (f *File) drawChartSeriesXVal(v formatChartSeries, formatSet *formatChart)
681
699
F : v .Categories ,
682
700
},
683
701
}
684
- chartSeriesXVal := map [string ]* cCat {Bar : nil , Bar3D : nil , Doughnut : nil , Line : nil , Pie : nil , Pie3D : nil , Radar : nil , Scatter : cat }
702
+ chartSeriesXVal := map [string ]* cCat {Bar : nil , BarStacked : nil , Bar3D : nil , Doughnut : nil , Line : nil , Pie : nil , Pie3D : nil , Radar : nil , Scatter : cat }
685
703
return chartSeriesXVal [formatSet .Type ]
686
704
}
687
705
@@ -693,7 +711,7 @@ func (f *File) drawChartSeriesYVal(v formatChartSeries, formatSet *formatChart)
693
711
F : v .Values ,
694
712
},
695
713
}
696
- chartSeriesYVal := map [string ]* cVal {Bar : nil , Bar3D : nil , Doughnut : nil , Line : nil , Pie : nil , Pie3D : nil , Radar : nil , Scatter : val }
714
+ chartSeriesYVal := map [string ]* cVal {Bar : nil , BarStacked : nil , Bar3D : nil , Doughnut : nil , Line : nil , Pie : nil , Pie3D : nil , Radar : nil , Scatter : val }
697
715
return chartSeriesYVal [formatSet .Type ]
698
716
}
699
717
@@ -715,7 +733,7 @@ func (f *File) drawChartDLbls(formatSet *formatChart) *cDLbls {
715
733
// format sets.
716
734
func (f * File ) drawChartSeriesDLbls (formatSet * formatChart ) * cDLbls {
717
735
dLbls := f .drawChartDLbls (formatSet )
718
- chartSeriesDLbls := map [string ]* cDLbls {Bar : dLbls , Bar3D : dLbls , Doughnut : dLbls , Line : dLbls , Pie : dLbls , Pie3D : dLbls , Radar : dLbls , Scatter : nil }
736
+ chartSeriesDLbls := map [string ]* cDLbls {Bar : dLbls , BarStacked : dLbls , Bar3D : dLbls , Doughnut : dLbls , Line : dLbls , Pie : dLbls , Pie3D : dLbls , Radar : dLbls , Scatter : nil }
719
737
return chartSeriesDLbls [formatSet .Type ]
720
738
}
721
739
0 commit comments