图表元素

本节介绍图表元素如图表区域、绘图区、图例、标题等的设置。图表元素是图表的必要组成部分,它们对图表本身进行美化和补充说明。[大谦Excel,dqexcel点com]

设置图表元素

使用Excel和Python xlwings可以方便地给图表添加图表元素。

使用Chart对象的SetElement方法可以为指定图表设置图表元素。该方法有一个参数,提供进行设置的选项。参数取值如表2-4所示。可见,该方法提供了很多图表元素的快捷设置途径。注意,这些设置不一定适合所有图表类型。

表2-4 SetElement方法的参数设置

名 称 说 明
msoElementChartFloorNone 1200 不显示图表基底
msoElementChartFloorShow 1201 显示图表基底
msoElementChartTitleAboveChart 2 在图表上方显示标题
msoElementChartTitleCenteredOverlay 1 将标题显示为居中覆盖
msoElementChartTitleNone 0 不显示图表标题
msoElementChartWallNone 1100 不显示图表背景墙
msoElementChartWallShow 1101 显示图表背景墙
msoElementDataLabelBestFit 210 使用数据标签最佳位置
msoElementDataLabelBottom 209 在底部显示数据标签
msoElementDataLabelCallout 211 将数据标签显示为标注
msoElementDataLabelCenter 202 居中显示数据标签
msoElementDataLabelInsideBase 204 在底端内侧显示数据标签
msoElementDataLabelInsideEnd 203 在顶端内侧显示数据标签
msoElementDataLabelLeft 206 靠左显示数据标签
msoElementDataLabelNone 200 不显示数据标签
msoElementDataLabelOutSideEnd 205 在顶端外侧显示数据标签
msoElementDataLabelRight 207 靠右显示数据标签
msoElementDataLabelShow 201 显示数据标签
msoElementDataLabelTop 208 在顶部显示数据标签
msoElementDataTableNone 500 不显示模拟运算表
msoElementDataTableShow 501 显示模拟运算表
msoElementDataTableWithLegendKeys 502 显示带图例项标示的模拟运算表
msoElementErrorBarNone 700 不显示误差线
msoElementErrorBarPercentage 702 显示百分比误差线
msoElementErrorBarStandardDeviation 703 显示标准偏差误差线
msoElementErrorBarStandardError 701 显示标准误差线
msoElementLegendBottom 104 在底部显示图例
msoElementLegendLeft 103 在左侧显示图例
msoElementLegendLeftOverlay 106 在左侧叠放图例
msoElementLegendNone 100 不显示图例
msoElementLegendRight 101 在右侧显示图例
msoElementLegendRightOverlay 105 在右侧叠放图例
msoElementLegendTop 102 在顶部显示图例
msoElementLineDropHiLoLine 804 显示垂直线和高/低线
msoElementLineDropLine 801 显示垂直线
msoElementLineHiLoLine 802 显示高/低线
msoElementLineNone 800 不显示线
msoElementLineSeriesLine 803 显示系列线
msoElementPlotAreaNone 1000 不显示绘图区
msoElementPlotAreaShow 1001 显示绘图区

图表标题

前面介绍了坐标轴标题,这里讲的图标标题是整个图表的标题。使用Excel和Python xlwings可以添加图表标题并设置属性。

用Chart对象的HasTitle属性确定是否显示图表标题,用ChartTitle属性返回一个ChartTitle对象,使用该对象的属性设置图表标题的文本和文本字体。下面创建图表,显示和设置标题,设置标题文本的字体。完整代码见:Samples->ch03图表基础->23 图表元素:标题->py.py。

code.python
#... 省略部分代码
sht.api.Range('A1:B7').Select()    #数据
cht=sht.api.Shapes.AddChart2(-1,\
          xw.constants.ChartType.xlColumnClustered,20,20,350,250,True).Chart    #创建图表
cht.HasTitle=True    #显示图表标题
cht.ChartTitle.Caption='Chart Title'    #标题文本
cht.ChartTitle.Characters.Font.Name='Times New Roman'    #标题文本的字体,字体名称
cht.ChartTitle.Characters.Font.Size=16    #字体大小
cht.ChartTitle.Characters.Font.Bold=True    #字体加粗
cht.ChartTitle.Characters.Font.Color=xw.utils.rgb_to_int((255,0,0))    #字体颜色

运行代码,设置效果如图2-15所示。

Document Image
\[\]

图2-15 设置图表标题

数据标签

数据标签表示图表中数据点处的数据。在图表上添加数据标签便于更精确地阅读图表。数据标签可以根据需要显示在不同的位置。

图例用Legend对象表示,使用Chart对象的HasLegend属性设置显示图例,使用Legend属性返回Legend对象。利用Legend对象的属性和方法对图例的外观、字体和位置等进行设置。完整代码见:Samples->ch03图表基础->24 图表元素:数据标签->py.py。

code.python
#... 省略部分代码
sht.api.Range('A1:B7').Select()    #数据
cht=sht.api.Shapes.AddChart2(-1, \
          xw.constants.ChartType.xlColumnClustered,20,20,350,250,True).Chart    #创建图表
cht.SetElement(201)    #显示数据标签

运行代码,创建图表并显示数据标签,如图2-16所示。

Document Image
\[\]

图2-16 给图表添加数据标签

绘图区

绘图区是由坐标系中两个坐标轴所确定的矩形区域。可以修改绘图区的颜色、透明度等,或进行渐变色填充、图案填充、图片填充、纹理填充等。

Excel中用Chart对象的PlotArea属性获取绘图区。连续引用ChartArea对象和PlotArea对象的Format.Fill属性,可以对绘图区的属性进行设置。

下面创建图表,获取图表区域并对该区域进行渐变色填充。完整代码见:Samples->ch03图表基础->25 图表元素:绘图区->py.py。

code.python
#... 省略部分代码
sht.api.Range('A1:B7').Select()    #数据
cht=sht.api.Shapes.AddChart2(-1, \
          xw.constants.ChartType.xlColumnClustered,20,20,350,250,True).Chart    #创建图表
cht.PlotArea.Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((255,255,26))    #绘图区前景色
cht.PlotArea.Format.Fill.OneColorGradient(1,1,1)    #绘图区垂向渐变色填充

运行代码,生成图2-17所示的图表。

Document Image
\[\]

图2-17 对绘图区进行渐变色填充

下面的代码创建图表并用图片填充绘图区。完整代码见:Samples->ch03图表基础->26 图表元素:绘图区2->py.py。

code.python
#... 省略部分代码
sht.api.Range('A1:B7').Select()    #数据
cht=sht.api.Shapes.AddChart2(-1, \
          xw.constants.ChartType.xlColumnClustered,20,20,350,250,True).Chart    #创建图表
cht.SeriesCollection(1).Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((255,255,0))
cht.PlotArea.Format.Fill.UserPicture('d:/picpy2.jpg')    #绘图区图片填充

运行代码生成图2-18。

Document Image
\[\]

图2-18 用图片填充绘图区

图表区

图表区是包含整个图表的矩形区域,可以对图表区的面进行设置,比如设置它们的颜色、透明度等,或进行渐变色填充、图案填充、图片填充、纹理填充等。

Excel中使用Chart对象的ChartArea属性获取图表区。连续引用ChartArea对象的Format.Fill属性,可以设置图表区的属性。

下面创建图表,获取图表区域并用图片填充该区域。完整代码见:Samples->ch03图表基础->27 图表元素:图表区->py.py。

code.python
#... 省略部分代码
sht.api.Range('A1:B7').Select()    #数据
cht=sht.api.Shapes.AddChart2(-1, \
xw.constants.ChartType.xlColumnClustered,20,20,350,250,True).Chart    #创建图表
cht.ChartArea.Format.Fill.UserPicture('d:/pic.jpg')    #图表区图片填充
cht.SeriesCollection(1).Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((255,255,0))  #序列1颜色
set_style(cht)    #设置样式
cht.Legend.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB=\
xw.utils.rgb_to_int((255,255,255))    #图例中的文本为白色

运行代码生成图2-19。

Document Image
\[\]

图2-19 设置图表区域和绘图区

图例

当图表中出现一个以上的序列时,需要给图表添加图例,以标示不同颜色、线型、点标记等对应的图形元素所表示的意义。图例可以根据图表整体布局的需要放在不同位置。也可以对图例中的图形和文本进行属性设置。

图例用Legend对象表示,使用Chart对象的HasLegend属性设置显示图例,使用Legend属性返回Legend对象。利用Legend对象的属性和方法对图例的外观、字体和位置等进行设置。

使用Legend对象的Format属性返回的ChartFormat对象,可以对图例的背景区域和外框进行属性设置。使用Legend对象的Font属性返回Font对象,设置字体。使用Legend对象的Position属性设置图例的显示位置。Position属性的取值如表2-5中所示。

表2-5 Position属性的取值

名 称 说 明
xlLegendPositionBottom -4107 位于图表下方
xlLegendPositionCorner 2 位于图表边框的右上角
xlLegendPositionCustom -4161 位于自定义的位置上
xlLegendPositionLeft -4131 位于图表的左侧
xlLegendPositionRight -4152 位于图表的右侧
xlLegendPositionTop -4160 位于图表的上方

下面创建复合柱状图,设置图例背景区域为黄色,位置为图表下方。完整代码见:Samples->ch03图表基础->28 图表元素:图例->py.py。

code.python
#... 省略部分代码
sht.api.Range('A1:B7').Select()    #数据
cht=sht.api.Shapes.AddChart2(-1, \
          xw.constants.ChartType.xlColumnClustered,20,20,350,250,True).Chart    #创建图表
cht.HasLegend=True    #显示图例
leg=cht.Legend    #获取图例
leg.Position=xw.constants.LegendPosition.xlLegendPositionBottom    #图例位置,底部
leg.Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((255,255,0))    #图例区域橙色填充

运行代码,生成图2-20所示的图表。

Document Image Document Image
\[\]

图2-20 图例效果1 图2-21 图例效果2

下面创建复合柱状图,设置图例背景区域为黄色,位置为图表右侧。完整代码见:Samples->ch03图表基础->29 图表元素:图例2->py.py。

code.python
#... 省略部分代码
sht.api.Range('A1:B7').Select()    #数据
cht=sht.api.Shapes.AddChart2(-1, \
          xw.constants.ChartType.xlColumnClustered,20,20,350,250,True).Chart    #创建图表
cht.HasLegend=True    #显示图例
leg=cht.Legend    #获取图例
leg.Position=xw.constants.LegendPosition.xlLegendPositionRight    #图例位置,右侧
leg.Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((255,255,0))    #图例区域橙色填充
leg.Format.Line.ForeColor.RGB=xw.utils.rgb_to_int((0,0,0))    #图例区域边线黑色
leg.Format.Line.Weight=2    #图例区域边线线宽为2

运行代码,生成图2-21所示的图表。

下面创建复合柱状图,设置图例背景区域为绿色,文本为白色,位置为图表下方。完整代码见:Samples->ch03图表基础->30 图表元素:图例2->py.py。

code.python
#... 省略部分代码
sht.api.Range('A1:B7').Select()    #数据
cht=sht.api.Shapes.AddChart2(-1, \
          xw.constants.ChartType.xlColumnClustered,20,20,350,250,True).Chart    #创建图表
cht.HasLegend=True
leg=cht.Legend
leg.Position=xw.constants.LegendPosition.xlLegendPositionBottom    #图例位于图表底部
leg.Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((0,200,0))    #图例区域绿色填充
#图例内文字白色
leg.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB=xw.utils.rgb_to_int((255,255,255))
leg.Format.TextFrame2.TextRange.Font.Name='Arial'    #图例内文字字体名称
leg.Format.TextFrame2.TextRange.Font.Italic=True    #图例内文字倾斜显示

运行代码,生成图2-22所示的图表。

Document Image Document Image
\[\]

图2-22 图例效果1 图2-23 图例效果2

下面创建复合柱状图,设置图例位置为图表上方。完整代码见:Samples->ch03图表基础->31 图表元素:图例4->py.py。

code.python
#... 省略部分代码
sht.api.Range('A1:B7').Select()    #数据
cht=sht.api.Shapes.AddChart2(-1, \
          xw.constants.ChartType.xlColumnClustered,20,20,350,250,True).Chart    #创建图表
cht.HasLegend=True
leg=cht.Legend
leg.Position=xw.constants.LegendPosition.xlLegendPositionTop    #图例位置,图表顶部
leg.Shadow=True    #给图例添加阴影
leg.Left=80    #图例左侧位置
leg.Width=200    #图例宽度

运行代码,生成图2-23所示的图表。