本节介绍图表元素如图表区域、绘图区、图例、标题等的设置。
SetElement方法
使用Chart对象的SetElement方法可以为指定图表设置图表元素。该方法有一个参数,提供进行设置的选项。参数取值如表5-9所示。可见,该方法提供了很多图表元素的快捷设置途径。注意,这些设置不一定适合所有图表类型。
表5-9 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 | 显示绘图区 |
下面选择数据创建图表,显示和设置标题,将标题显示为居中覆盖,显示数据标签,在底部显示图例。
>>> sht.api.Range("A1:B7").Select()
>>> cht=sht.api.Shapes.AddChart().Chart
>>> cht.HasTitle=True
>>> cht.ChartTitle.Text="这里是图表标题"
>>> cht.SetElement(1) #将标题显示为居中覆盖
>>> cht.SetElement(201) #显示数据标签
>>> cht.SetElement(104) #在底部显示图例
设置效果如图5-23所示。
图5-23 设置图表元素
图表区域/绘图区
图表区域是包含整个图表的矩形区域,绘图区则是由两个坐标轴所确定的矩形区域。Excel中用ChartArea对象表示图表区域,用PlotArea表示绘图区。使用Chart对象的ChartArea属性和PlotArea属性获取它们。
连续引用ChartArea对象和PlotArea对象的Format.Fill属性,可以对两个区域中的面进行设置,比如设置它们的颜色、透明度等,或进行渐变色填充、图案填充、图片填充、纹理填充等。这部分的设置方法请参见5.3节内容。
下面选择数据创建图表,获取图表区域并设置其前景色为绿色,添加阴影;获取绘图区域并设置图片填充作为图表的背景,修改图表序列1的前景色为黄色,取消水平网格线的显示。
>>> sht.api.Range("A1:B7").Select()
>>> cht=sht.api.Shapes.AddChart().Chart
>>> cha=cht.ChartArea #图表区域
>>> cha.Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((155,255,0))
>>> cha.Shadow=True #显示阴影
>>> pla=cht.PlotArea #绘图区域
>>> pla.Format.Fill.UserPicture(r"D:\picpy2.jpg") #图片填充
>>> cht.SeriesCollection(1).Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((255,255,0))
>>> cht.Axes(2).HasMajorGridlines=False
生成图5-24所示的图表。
图5-24 设置图表区域和绘图区
使用ChartArea对象和PlotArea对象的Format.Shadow属性可以对图表区域和绘图区的阴影进行更多设置。Format.Shadow属性返回一个ShadowFormat对象,该对象的主要属性有:
• Visible属性:设置阴影是否可见。
• Blur属性:返回或设置指定底纹的模糊度。
• Transparency属性:返回或设置区域的透明度,取值范围为0.0(不透明)到1.0(清晰)之间。
• OffsetX属性:以磅为单位返回或设置区域阴影的水平偏移量。正偏移值将阴影向右偏移,负偏移值将阴影向左偏移。
• OffsetY属性:以磅为单位返回或设置区域阴影的垂直偏移量。正偏移值将阴影向下偏移,负偏移值将阴影向上偏移。
下面接着上面的代码进行设置。首先取消图表区域的阴影显示,然后用Format.Shadow属性设置绘图区的阴影,显示阴影并设置水平方向和垂直方向的偏移量均为3。
>>> cha.Shadow=False
>>> pla.Format.Shadow.Visible=True #绘图区显示阴影
>>> pla.Format.Shadow.OffsetX=3 #阴影的水平偏移
>>> pla.Format.Shadow.OffsetY=3 #阴影的垂向偏移
效果如图5-25所示。
图5-25 绘图区的阴影设置
图例
图例用Legend对象表示,使用Chart对象的HasLegend属性设置显示图例,使用Legend属性返回Legend对象。利用Legend对象的属性和方法对图例的外观、字体和位置等进行设置。
使用Legend对象的Format属性返回的ChartFormat对象,可以对图例的背景区域和外框进行属性设置。使用Legend对象的Font属性返回Font对象,设置字体。使用Legend对象的Position属性设置图例的显示位置。Position属性的取值如表5-10中所示。
表5-10 Position属性的取值
| 名 称 | 值 | 说 明 |
|---|---|---|
| xlLegendPositionBottom | -4107 | 位于图表下方 |
| xlLegendPositionCorner | 2 | 位于图表边框的右上角 |
| xlLegendPositionCustom | -4161 | 位于自定义的位置上 |
| xlLegendPositionLeft | -4131 | 位于图表的左侧 |
| xlLegendPositionRight | -4152 | 位于图表的右侧 |
| xlLegendPositionTop | -4160 | 位于图表的上方 |
下面选择数据创建图表,设置图例字体为倾斜,图例背景区域为黄色,外框为兰色,位置为图表下方。
>>> sht.api.Range("A1:B7").Select() #数据
>>> cht=sht.api.Shapes.AddChart().Chart #添加图表
>>> cht.Legend.Font.Italic=True #图例字体倾斜
>>> cht.Legend.Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((255,255,0))
>>> cht.Legend.Format.Line.ForeColor.RGB=xw.utils.rgb_to_int((0,0,255))
>>> cht.Legend.Position=-4107 #图例位置在图表下方
图例设置效果如图5-26所示。
图5-26 设置图例