复杂的图表是由点、线、面等基本图形元素组成的,比如图5-7所示的图表中,有点、直线段、矩形区域、文本等图形元素。关于基本图形元素的属性设置,在第5章有较详细的介绍。本节主要介绍怎样把基本图形元素从图表中提取出来并进行属性设置。[大谦Excel,dqexcel点com]
颜色设置
颜色的设置主要有RGB着色、索引着色、主题颜色着色和配色方案着色4种。具体设置时,往往是通过图形对象的BackColor属性和ForeColor属性返回一个ColorFormat对象,该对象提供了RGB, ObjectThemeColor, SchemeColor等属性,用它们设置RGB着色、主题颜色着色和配色方案着色。索引着色常常用于字体颜色的设置。关于这4种颜色设置方法,第5章有详细的介绍,不再赘述,请大家自行参阅。
下面用RGB着色将序列1中柱形的颜色改为绿色。首先获取柱形区域对象,用RGB着色方式修改它们的颜色:
>>> ser=cht.SeriesCollection("P1")
>>> ser.Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((0,255,0))
使用主题颜色修改:
>>> ser.Format.Fill.ForeColor.ObjectThemeColor=10
使用配色方案着色:
>>> ser.Format.Fill.ForeColor.SchemeColor=3
颜色设置效果如图5-8所示。
图5-8 修改图形的颜色
线形图元的属性设置
图5-8中,折线图中的直线段是线形图元。将这些线形图元提取出来以后,可以改变它们的属性。连续引用Series对象的Format.Line属性,返回一个LineFormat对象,表示序列中的线形对象。用LineFormat对象的成员对线形对象进行设置。关于LineFormat对象,在第5章有详细的介绍,请参阅。
获取序列2折线图中的直线段,设置线型为虚线,颜色为兰色。
>>> ser2.Format.Line.DashStyle=4
>>> ser2.Format.Line.ForeColor.RGB=xw.utils.rgb_to_int((0,0,255))
设置效果如图5-9所示。
图5-9 修改图表中线形图元的属性
区域的透明度和颜色填充
图5-9中,图表中的柱形属于区域,是面。将这些区域图元提取出来以后,可以改变它们的属性。连续引用Series对象的Format.Fill属性,返回一个FillFormat对象,表示序列中的区域对象。用FillFormat对象的成员对区域对象进行设置。关于FillFormat对象,在第5章有详细的介绍,请参阅。
下面获取序列1中表示区域的FillFormat对象。
>>> ff=ser.Format.Fill
使用FillFormat对象的Transparency属性,可以设置矩形区域的透明度。该属性的取值范围为 0.0(不透明)到 1.0(清晰)之间。
>>> ff.Transparency=0.7
效果如图5-10中序列1柱状图所示。
除了使用区域对象的ForeColor属性进行着色外,还可以对它们进行颜色填充,可以单色填充,也可以单色、双色甚至多色渐变色填充。使用FillFormat对象的Solid方法进行单色填充,使用OneColorGradient方法进行单色渐变色填充,使用TwoColorGradient方法进行双色渐变色填充。这部分内容,在第5章有详细的介绍,请参阅。
下面先将序列2的图表类型改为复合柱状图。
>>> ser2.ChartType=51
由于先前将折线图的线型改为兰色虚线,转成柱状图后,柱形区域的边框显示为兰色虚线。下面获取序列2中表示柱形区域的FillFormat对象ff2,然后用该对象的OneColorGradient方法进行单色渐变色填充。
>>> ff2=ser2.Format.Fill
>>> ff2.OneColorGradient(1,1,1)
设置效果如图5-10中序列2所示。可见,单色渐变色填充是从白色到ForeColor属性指定的颜色之间渐变填充。
图5-10 图表中区域的透明度设置和单色渐变色填充
使用FillFormat对象的TwoColorGradient方法进行双色渐变色填充。这里的双色,是由FillFormat对象的ForeColor属性和BackColor属性指定的。注意,BackColor属性的设置必须在调用TwoColorGradient方法之后进行。将ForeColor属性和BackColor属性设置为红色和黄色。
>>> ff2=ser2.Format.Fill
>>> ff2.ForeColor.RGB=xw.utils.rgb_to_int((255,0,0))
>>> ff2.TwoColorGradient(1,1)
>>> ff2.BackColor.RGB=xw.utils.rgb_to_int((255,255,0))
效果如图5-11中序列2所示。
图5-11 双色渐变色填充和图案填充
区域的图案/图片/纹理填充
使用FillFormat对象的Patterned方法进行图案填充。该方法有一个参数,指定填充图案的样式。第5章有详细介绍,请参阅。
下面对序列1各柱形区域进行图案填充。
>>> ff=ser.Format.Fill
>>> ff.ForeColor.RGB=xw.utils.rgb_to_int((0,0,255))
>>> ff.Patterned(43)
效果如图5-11中序列1所示。
使用FillFormat对象的UserPicture方法进行图片填充。该方法有一个参数,指定填充图片的文件路径和名称。如果只指定文件名,则该文件应该位于当前工作目录下。
下面用D盘下picpy.jpg文件中的图片填充序列1中的矩形区域。
>>> ff=ser.Format.Fill
>>> ff.UserPicture(r”D:\picpy.jpg”)
效果如图5-12中序列1所示。
使用FillFormat对象的UserTextured方法进行纹理填充。该方法有一个参数,指定填充纹理图片的文件路径和名称。如果只指定文件名,则该文件应该位于当前工作目录下。
下面用D盘下picpy2.jpg文件中的图片对序列2中的矩形区域进行纹理填充。
>>> ff2=ser2.Format.Fill
>>> ff2.UserTextured(r"D:\picpy2.jpg")
效果如图5-12中序列2所示。可见,图片填充时将图片进行了拉伸缩放,使图片正好能显示在指定区域中;纹理填充时图片保持原来的大小,在指定区域内平铺显示。
图5-12 图片填充和纹理填充