图表

《Excelize 权威指南》图书出版,网上购买方式:人民邮电出版社 |异步社区 |天猫 |京东 |当当 |微店 |抖音 |拼多多

添加图表

  1. func (f *File) AddChart(sheet, cell string, chart *ChartOptions, combo ...*ChartOptions) error

根据给定的工作表名称、单元格坐标和图表样式属性插入图表。

下面是 Excelize 支持创建的图表类型 Type

ID枚举图表类型
0Area二维面积图
1AreaStacked二维堆积面积图
2AreaPercentStacked二维百分比堆积面积图
3Area3D三维面积图
4Area3DStacked三维堆积面积图
5Area3DPercentStacked三维百分比堆积面积图
6Bar二维簇状条形图
7BarStacked二维堆积条形图
8BarPercentStacked二维百分比堆积条形图
9Bar3DClustered三维簇状条形图
10Bar3DStacked三维堆积条形图
11Bar3DPercentStacked三维百分比堆积条形图
12Bar3DConeClustered三维簇状水平圆锥图
13Bar3DConeStacked三维堆积水平圆锥图
14Bar3DConePercentStacked三维堆积百分比水平圆锥图
15Bar3DPyramidClustered三维簇状水平棱锥图
16Bar3DPyramidStacked三维堆积水平棱锥图
17Bar3DPyramidPercentStacked三维堆积百分比水平棱锥图
18Bar3DCylinderClustered三维簇状水平圆柱图
19Bar3DCylinderStacked三维堆积水平圆柱图
20Bar3DCylinderPercentStacked三维堆积百分比水平圆柱图
21Col二维簇状柱形图
22ColStacked二维堆积柱形图
23ColPercentStacked二维百分比堆积柱形图
24Col3D三维柱形图
25Col3DClustered三维簇状柱形图
26Col3DStacked三维堆积柱形图
27Col3DPercentStacked三维百分比堆积柱形图
28Col3DCone三维圆锥图
29Col3DConeClustered三维簇状圆锥图
30Col3DConeStacked三维堆积圆锥图
31Col3DConePercentStacked三维百分比堆积圆锥图
32Col3DPyramid三维棱锥图
33Col3DPyramidClustered三维簇状棱锥图
34Col3DPyramidStacked三维堆积棱锥图
35Col3DPyramidPercentStacked三维百分比堆积棱锥图
36Col3DCylinder三维圆柱图
37Col3DCylinderClustered三维簇状圆柱图
38Col3DCylinderStacked三维堆积圆柱图
39Col3DCylinderPercentStacked三维百分比堆积圆柱图
40Doughnut圆环图
41Line折线图
42Line3D三维折线图
43Pie饼图
44Pie3D三维饼图
45PieOfPie子母饼图
46BarOfPie复合条饼图
47Radar雷达图
48Scatter散点图
49Surface3D三维曲面图
50WireframeSurface3D三维曲面图(框架图)
51Contour曲面图
52WireframeContour曲面图(俯视框架图)
53Bubble气泡图
54Bubble3D三维气泡图

在 Office Excel 中图表数据区域 Series 指定了绘制哪些数据的信息集合、图例项(系列)和水平(分类)轴标签。

下面是 Excelize 中 Series 的可选参数:

参数含义
Name图例项(系列),在图表图例和公式栏中显示。Name 参数是可选的,如果不指定该值默认将会使用 Series 1 .. n 表示。Name 支持使用公式表示,例如:Sheet1!$A$1
Categories水平(分类)轴标签。在大多数图表类型中,Categories 属性是可选的,默认为形如 1..n 的连续序列。
Values图表数据区域,是 Series 中最重要的参数,也是创建图表时唯一的必选参数。该选项将图表与其显示的工作表数据链接起来。
Fill设置图表中每个数据系列的填充格式。
Line设置折线图的折线格式。Line 属性是可选的,如果未指定该属性,则为默认样式。可以设置的选项是 Width,宽度范围是 0.25pt 至 999pt。如果 Width 的值超出范围,则线的默认宽度为 2pt。
Marker设置折线图和散点图的数据点标记格式。可选参数 Size 内置数据标记图形的大小,其取值范围是 2-72 (默认缺省值为 5)。线端类型可选参数 Symbol 的枚举值为 (默认缺省值为 auto): circle, dash, diamond, dot, none, picture, plus, square, star, triangle, xauto.
DataLabelPosition设置图表中每个数据系列数据标签的位置。

参数 Legend 提供对图例项的属性设置方法,下面是 Excelize 中 Legend 的可选参数:

参数类型含义
Positionstring图例位置
ShowLegendKeybool指定是否在数据标签中显示图例项标示

其中参数 Position 默认值为 right。下面是该参数的可选值:

可选值含义
none关闭图例
top靠上
bottom靠下
left靠左
right靠右
top_right右上

其中参数 ShowLegendKey 默认值为 false

通过可选 Title 对象的 Name 参数设置图表标题,标题将会在图表上方显示。参数 Name 支持使用公式表示,例如 Sheet1!$A$1,图表标题的默认值为空。

参数 ShowBlanksAs 提供“隐藏和清空单元格”设置,默认值为:gap 即“空单元格显示为”:“空距”。下面是该参数的可选值:

含义
gap空距
span用直线连接数据点
zero零值

参数 BubbleSize 用于设置气泡图和三维气泡图的气泡大小。该参数是可选的,其取值范围是 1-300 (默认缺省值为 100)

参数 HoleSize 用于设置圆环图的圆环内径大小。该参数是可选的,其取值范围是 1-90 (默认缺省值为 75)

参数 VaryColors 用于指定是否设置图表数据系列格式为自动填充颜色,默认值为 true

参数 Format 提供对图表偏移、缩放、高宽比设置和打印属性等参数的设置,其参数与在 AddPicture 函数中所使用的相同。

通过可选 PlotArea 对象设置绘图区域格式,可选参数如下:

参数类型默认值含义
SecondPlotValuesint0子母饼图和复合条饼图中第二绘图区域中的数据系列数量
ShowBubbleSizeboolfalse气泡大小
ShowCatNameboolfalse类别名称
ShowLeaderLinesboolfalse显示引导线
ShowPercentboolfalse百分比
ShowSerNameboolfalse系列名称
ShowValboolfalse
NumFmtChartNumFmtN/A设置数据标签的数字格式和链接到源

通过参数 XAxisYAxis 参数设置坐标轴选项。

下面是 XAxis 参数的可选值:

参数类型默认值含义
Noneboolfalse隐藏坐标轴
MajorGridLinesboolfalse主要网格线
MinorGridLinesboolfalse次要网格线
TickLabelSkipint1指定标签间隔单位
ReverseOrderboolfalse逆序刻度值
Maximumfloat640最大值,0 代表自动
Minimumfloat640最小值,0 代表自动
FontFontN/A设置水平坐标轴刻度字体格式
NumFmtChartNumFmtN/A设置水平坐标轴数字格式和链接到源
Title[]RichTextRunN/A设置位于坐标轴下方的主要横坐标轴标题,并调整图表大小

下面是 YAxis 参数的可选值:

参数类型默认值含义
Noneboolfalse隐藏坐标轴
MajorGridLinesboolfalse主要网格线
MinorGridLinesboolfalse次要网格线
MajorUnitfloat640坐标轴主要刻度单位,MajorUnit 参数为可选参数,默认值 0 代表为自动
ReverseOrderboolfalse逆序刻度值
Maximumfloat640最大值,0 代表自动
Minimumfloat640最小值,0 代表自动
FontFontN/A设置垂直坐标轴刻度字体格式
LogBasefloat64N/A设置垂直坐标轴对数刻度的基数
NumFmtChartNumFmtN/A设置垂直坐标轴数字格式和链接到源
Title[]RichTextRunN/A设置旋转过的主要纵坐标轴标题,并调整图表大小

通过可选 Dimension 对象设置图表的大小,可选参数如下:

参数类型默认值含义
Heightuint260高度
Widthuint480宽度

参数 combo 用来指定创建组合图表,该图表将两个或多个图表类型组合在一个图表中。例如,在 Sheet1!$E$1:$L$15 区域创建一个 簇状柱形图 - 折线图:

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. )
  6. func main() {
  7. f := excelize.NewFile()
  8. defer func() {
  9. if err := f.Close(); err != nil {
  10. fmt.Println(err)
  11. }
  12. }()
  13. for idx, row := range [][]interface{}{
  14. {nil, "Apple", "Orange", "Pear"},
  15. {"Small", 2, 3, 3},
  16. {"Normal", 5, 2, 4},
  17. {"Large", 6, 7, 8},
  18. } {
  19. cell, err := excelize.CoordinatesToCellName(1, idx+1)
  20. if err != nil {
  21. fmt.Println(err)
  22. return
  23. }
  24. if err := f.SetSheetRow("Sheet1", cell, &row); err != nil {
  25. fmt.Println(err)
  26. return
  27. }
  28. }
  29. enable, disable := true, false
  30. if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
  31. Type: excelize.Col,
  32. Series: []excelize.ChartSeries{
  33. {
  34. Name: "Sheet1!$A$2",
  35. Categories: "Sheet1!$B$1:$D$1",
  36. Values: "Sheet1!$B$2:$D$2",
  37. },
  38. },
  39. Format: excelize.GraphicOptions{
  40. ScaleX: 1,
  41. ScaleY: 1,
  42. OffsetX: 15,
  43. OffsetY: 10,
  44. PrintObject: &enable,
  45. LockAspectRatio: false,
  46. Locked: &disable,
  47. },
  48. Title: []excelize.RichTextRun{
  49. {
  50. Text: "簇状柱形图 - 折线图",
  51. },
  52. },
  53. Legend: excelize.ChartLegend{
  54. Position: "left",
  55. },
  56. PlotArea: excelize.ChartPlotArea{
  57. ShowCatName: false,
  58. ShowLeaderLines: false,
  59. ShowPercent: true,
  60. ShowSerName: true,
  61. ShowVal: true,
  62. },
  63. }, &excelize.Chart{
  64. Type: excelize.Line,
  65. Series: []excelize.ChartSeries{
  66. {
  67. Name: "Sheet1!$A$4",
  68. Categories: "Sheet1!$B$1:$D$1",
  69. Values: "Sheet1!$B$4:$D$4",
  70. Marker: excelize.ChartMarker{
  71. Symbol: "none", Size: 10,
  72. },
  73. },
  74. },
  75. Format: excelize.GraphicOptions{
  76. ScaleX: 1,
  77. ScaleY: 1,
  78. OffsetX: 15,
  79. OffsetY: 10,
  80. PrintObject: &enable,
  81. LockAspectRatio: false,
  82. Locked: &disable,
  83. },
  84. Legend: excelize.ChartLegend{
  85. Position: "right",
  86. },
  87. PlotArea: excelize.ChartPlotArea{
  88. ShowCatName: false,
  89. ShowLeaderLines: false,
  90. ShowPercent: true,
  91. ShowSerName: true,
  92. ShowVal: true,
  93. },
  94. }); err != nil {
  95. fmt.Println(err)
  96. return
  97. }
  98. // 保存工作簿
  99. if err := f.SaveAs("Book1.xlsx"); err != nil {
  100. fmt.Println(err)
  101. }
  102. }

创建图表工作表

  1. func (f *File) AddChartSheet(sheet string, chart *ChartOptions, combo ...*ChartOptions) error

根据给定的工作表名称和图表样式属性创建图表工作表,图表样式属性的定义与 AddChart 函数相同。Excel 中的图表工作表是仅包含图表的工作表。

删除图表

  1. func (f *File) DeleteChart(sheet, cell string) error

根据给定的工作表名称和单元格坐标删除图表。