坐标系的特殊设置包括多轴图和对数坐标图等。[大谦Excel,dqexcel点com]
双轴图
双轴图是一种组合图,它将两个图表组合显示在一幅图中。这两个图表使用共同的横轴和不同的纵轴。
使用API使用方式,通过Chart对象获取Axis对象的语法格式为:
axs=cht.Axes(Type,AxisGroup)
其中,cht为Chart对象。Type参数表示坐标轴的类型,值取1时表示分类轴,值为2时为数值轴。AxisGroup参数的值为1时表示坐标轴为主轴,为2时坐标轴为辅轴。默认时,主轴显示在左侧,辅轴显示在右侧。这样就可以生成双轴图,即绘图区两个图叠加显示,使用相同的横轴不同的纵轴。
下面创建柱状图和线形图组成的双轴图,柱状图使用纵轴主轴,线形图使用纵轴辅轴。完整代码见:Samples->ch03图表基础->21 坐标系:多轴图->py.py。
#... 省略部分代码
sht.api.Range('A1:B7').Select() #数据
cht=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,\
20,20,350,200,True).Chart #创建图表
cht.SeriesCollection(1).AxisGroup=1 #序列1使用主轴
cht.SeriesCollection(2).AxisGroup=2 #序列2使用辅轴
cht.SeriesCollection(2).ChartType=xw.constants.ChartType.xlLine #图表类型
cht.SeriesCollection(2).MarkerStyle=xw.constants.MarkerStyle.xlMarkerStyleTriangle #点标记
cht.SeriesCollection(2).MarkerForegroundColor=xw.utils.rgb_to_int((0,0,255)) #点标记的前景色
cht.SeriesCollection(2).MarkerSize=8 #点标记的大小
cht.SeriesCollection(2).HasDataLabels=True #序列2显示数据标签
cht.SeriesCollection(1).HasDataLabels=True #序列1显示数据标签
axs1=cht.Axes(2,1) #左纵轴
axs1.MinimumScale=0 #左纵轴最小值
axs1.MaximumScale=60 #左纵轴最大值
axs1.HasTitle=True #添加图表标题
axs1.AxisTitle.Text='纵坐标轴1' #坐标轴标题
axs2=cht.Axes(2,2) #右纵轴
axs2.MinimumScale=10
axs2.MaximumScale=160
axs2.HasTitle=True
axs2.AxisTitle.Text='纵坐标轴2'
cht.ChartTitle.Caption='双轴图'
运行代码,生成双轴图如图2-13所示。图中,柱状图使用左侧的纵坐标轴,折线图使用右侧的纵坐标轴。
图2-13 双轴图
对数坐标图
默认时,坐标系中坐标轴的刻度线等间隔排列,对应的值是等差数列的关系。如果值是等比数列的关系,就要用到对数坐标。对数坐标图中,单个坐标轴或两个坐标轴的刻度间隔取对数间隔。如果只有单个坐标轴的刻度线取对数间隔,称为X对数坐标图或Y对数坐标图;如果两个坐标轴的刻度线取对数间隔,称为双对数坐标图。
Axis对象的ScaleType属性返回或设置数值轴的刻度类型,取值如表2-3所示。坐标轴的ScaleType属性的值设置为xw.constants.ScaleType.xlScaleLogarithmic时该轴刻度线为对数间隔,据此可绘制对数坐标图。
表2-3 ScaleType属性的取值
| 名 称 | 值 | 说 明 |
|---|---|---|
| xlScaleLinear | -4132 | 线性刻度 |
| xlScaleLogarithmic | -4133 | 对数刻度 |
下面创建图表,将纵轴对象的ScaleType属性设置为xw.constants.ScaleType.xlScaleLogarithmic,创建对数坐标图。显示水平方向的网格线。完整代码见:Samples->ch03图表基础->22 坐标系:对数坐标->py.py。
#... 省略部分代码
sht.api.Range('A1:B7').Select() #数据
cht=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,\
20,20,350,250,True).Chart #创建图表
cht.Axes(2).ScaleType=xw.constants.ScaleType.xlScaleLogarithmic #对数坐标
cht.Axes(2).HasMinorGridlines=True #显示纵轴次网格线
运行代码,生成图表如图2-14所示。
图2-14 对数坐标图