坐标系的特殊设置包括多轴图和对数坐标图等。
双轴图
双轴图是一种组合图,它将两个图表组合显示在一幅图中。这两个图表使用共同的横轴和不同的纵轴。
使用API使用方式,通过Chart对象获取Axis对象的语法格式为:
Set axs=cht.Axes(Type,AxisGroup)
其中,cht为Chart对象。Type参数表示坐标轴的类型,值取1时表示分类轴,值为2时为数值轴。AxisGroup参数的值为1时表示坐标轴为主轴,为2时坐标轴为辅轴。默认时,主轴显示在左侧,辅轴显示在右侧。这样就可以生成双轴图,即绘图区两个图叠加显示,使用相同的横轴不同的纵轴。
下面创建柱状图和线形图组成的双轴图,柱状图使用纵轴主轴,线形图使用纵轴辅轴。完整代码见:Samples->ch03图表基础->21 坐标系:多轴图->py.py。
Sub Test()
Dim cht As Chart
ActiveSheet.Range("A1:B7").Select
Set cht = ActiveSheet.Shapes.AddChart2(-1, xlColumnClustered, _
200, 20, 350, 200, True).Chart
cht.SeriesCollection(1).AxisGroup = 1 '序列1使用主轴
cht.SeriesCollection(2).AxisGroup = 2 '序列2使用辅轴
cht.SeriesCollection(2).ChartType = xlLine
cht.SeriesCollection(2).MarkerStyle = xlMarkerStyleTriangle
cht.SeriesCollection(2).MarkerForegroundColor = RGB(0, 0, 255)
cht.SeriesCollection(2).MarkerSize = 8
cht.SeriesCollection(2).HasDataLabels = True
cht.SeriesCollection(1).HasDataLabels = True
Dim axs1 As Axis
Dim axs2 As Axis
Set axs1 = cht.Axes(2, 1)
axs1.MinimumScale = 0
axs1.MaximumScale = 60
axs1.HasTitle = True
axs1.AxisTitle.Text = "纵坐标轴1"
Set axs2 = cht.Axes(2, 2)
axs2.MinimumScale = 10
axs2.MaximumScale = 160
axs2.HasTitle = True
axs2.AxisTitle.Text = "纵坐标轴2"
cht.ChartTitle.Caption = "双轴图"
End Sub
运行代码,生成双轴图如图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。
Sub Test()
Dim cht As Chart
ActiveSheet.Range("A1:B7").Select
Set cht = ActiveSheet.Shapes.AddChart2(-1, xlColumnClustered, _
200, 20, 350, 250, True).Chart
cht.Axes(2).ScaleType = xlScaleLogarithmic '对数坐标
cht.Axes(2).HasMinorGridlines = True
End Sub
运行代码,生成图表如图2-14所示。
图2-14 对数坐标图