统计显示,科研期刊上用得最多的图表类型是线形图和柱状图,简单、好用。线形图包括简单线形图、复合线形图和平滑线形图等。
简单线形图
简单线形图用一条折线表示一组数据。
图4-1 简单线形图
下面的代码用给定数据绘制简单线形图。完整代码见:Samples->ch06 分类型图表->09 简单线形图->py.py。
#... 省略部分代码
sht.api.Range('A2:B11').Select() #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlLine,20,20,350,220,True)
cht=shp.Chart #获取图表
运行代码生成图4-1。
复合线形图
复合线形图用多条折线表现矩阵数据,每一根折线构成一个序列,表现矩阵数据中的一行。不同的折线用不同的颜色、线型或标记进行区分。复合线形图需要添加图例对不同折线所表示的意义进行说明。
图4-2 复合线形图
下面的代码用给定的矩阵数据绘制复合线形图。完整代码见:Samples->ch06 分类型图表->10 复合线形图->py.py。
#... 省略部分代码
sht.api.Range('A2:C11').Select() #数据
shp=sht.api.Shapes.AddChart2(-1, xw.constants.ChartType.xlLine, 20, 20, 350, 220, True)
cht=shp.Chart #获取图表
运行代码生成图4-2。
如果线形图上显示数据点的点标记,则该图又称为点线图。下面用相同数据绘制点线图。
图4-3 复合线形图
下面的代码用给定的矩阵数据绘制复合线形图,设置标记的属性。完整代码见:Samples->ch06 分类型图表->11 复合线形图2->py.py。
#... 省略部分代码
sht.api.Range('A2:C11').Select() #数据
shp=sht.api.Shapes.AddChart2(-1, xw.constants.ChartType.xlLineMarkers, 20, 20, 350, 220, True)
cht=shp.Chart #获取图表
#序列2的点标记类型为菱形
cht.SeriesCollection(2).MarkerStyle=xw.constants.MarkerStyle.xlMarkerStyleDiamond
运行代码生成图4-3。
平滑线形图
将绘图数据进行样条插值平滑处理后绘制线形图,图中的线条平滑,不再是折线,该图表称为平滑线形图。Excel中不需要自己平滑数据,可以直接生成平滑线形图。
图4-4 三维线形图
下面用Excel文件data.xlsx中的数据绘制平滑线形图。完整代码见:Samples->ch06 分类型图表->12 平滑线形图->py.py。
#... 省略部分代码
sht.api.Range('B2:D11').Select() #数据
shp=sht.api.Shapes.AddChart2(-1, xw.constants.ChartType.xlXYScatterSmoothNoMarkers, \
30, 20, 350, 220, True)
cht=shp.Chart #获取图表
运行代码生成图4-4。
纵向线形图
交换普通线形图的横轴和纵轴,得到纵向线形图。纵向线形图的纵轴为分类轴,横轴为数值轴。
图4-5 纵向线形图
下面用Excel文件data.xlsx中的数据绘制纵向线形图。完整代码见:Samples->ch06 分类型图表->13 纵向线形图->py.py。
#... 省略部分代码
sht.api.Range('B2:D11').Select() #数据
shp=sht.api.Shapes.AddChart2(-1, xw.constants.ChartType.xlXYScatterLines, 30, 20, 270, 350, True)
cht=shp.Chart #获取图表
#清空序列
count=cht.SeriesCollection().Count
if count>0:
for i in range(count,0,-1):
cht.SeriesCollection(i).Delete()
cht.SeriesCollection().NewSeries() #新建序列
cht.SeriesCollection(1).ChartType=xw.constants.ChartType.xlXYScatterLines
cht.SeriesCollection(1).XValues=sht.api.Range("B2:B12") #横轴数据
cht.SeriesCollection(1).Values=sht.api.Range("D2:D12") #纵轴数据
cht.SeriesCollection().NewSeries() #新建序列
cht.SeriesCollection(2).ChartType=xw.constants.ChartType.xlXYScatterLines
cht.SeriesCollection(2).XValues=sht.api.Range("C2:C12") #横轴数据
cht.SeriesCollection(2).Values=sht.api.Range("D2:D12") #纵轴数据
cht.SeriesCollection(2).MarkerStyle=xw.constants.MarkerStyle.xlMarkerStyleDiamond
#横轴和纵轴的取值范围
cht.Axes(1).MinimumScale=0.04
cht.Axes(1).MaximumScale=0.28
cht.Axes(2).MinimumScale=0
cht.Axes(2).MaximumScale=12
cht.HasLegend=True
运行代码生成图4-5。
线形图+渐变色背景
如果觉得线形图有点单调,可以给线形图添加背景色。给图表添加背景色,将绘图区用单色或渐变色填充即可。
图4-6 给线形图设置渐变色背景
下面用Excel文件data.xlsx中的数据绘制复合线形图并给图表添加渐变色背景。完整代码见:Samples->ch06 分类型图表->14 线形图+渐变色背景->py.py。
#... 省略部分代码
sht.api.Range('A2:C11').Select() #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlLine,20,20,350,250,True)
cht=shp.Chart #获取图表
#绘图区垂向单色渐变填充
cht.PlotArea.Format.Fill.ForeColor.RGB=xw.utils.rgb_to_int((0,0,255))
cht.PlotArea.Format.Fill.OneColorGradient(1, 1, 1) #msoGradientHorizontal
运行代码生成图4-6。
带形图
可以用带形图形元素在三维坐标系中表现一维数组或多个一维数组的数据。
图4-7 带形图
下面用Excel文件data.xlsx中的数据绘制带形图。完整代码见:Samples->ch06 分类型图表->15 带形图->py.py。
#... 省略部分代码
sht.api.Range('A2:C11').Select() #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xl3DLine,20,20,350,250,True)
cht=shp.Chart #获取图表
运行代码生成图4-7。