坐标系的特殊设置

坐标系的特殊设置包括多轴图和对数坐标图等。

双轴图

双轴图是一种组合图,它将两个图表组合显示在一幅图中。这两个图表使用共同的横轴和不同的纵轴。

使用API使用方式,通过Chart对象获取Axis对象的语法格式为:

code.vba
Set axs=cht.Axes(Type,AxisGroup)

其中,cht为Chart对象。Type参数表示坐标轴的类型,值取1时表示分类轴,值为2时为数值轴。AxisGroup参数的值为1时表示坐标轴为主轴,为2时坐标轴为辅轴。默认时,主轴显示在左侧,辅轴显示在右侧。这样就可以生成双轴图,即绘图区两个图叠加显示,使用相同的横轴不同的纵轴。

下面创建柱状图和线形图组成的双轴图,柱状图使用纵轴主轴,线形图使用纵轴辅轴。完整代码见:Samples->ch03图表基础->21 坐标系:多轴图->py.py。

code.vba
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所示。图中,柱状图使用左侧的纵坐标轴,折线图使用右侧的纵坐标轴。

Document Image
\[\]

图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。

code.vba
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所示。

Document Image
\[\]

图2-14 对数坐标图