点图

点图用一组或多组点表示向量或矩阵定义的数据。点图有一个坐标轴表示分类数据,可以是横轴,也可以是纵轴。横轴为分类轴时称为点图,纵轴为分类轴时常称为滑珠图。后面介绍的散点图也是用点集表示点数据,但它的横轴和纵轴都是数值轴,两种图的作用也完全不同。点图的特点是简洁明了。[大谦Excel,dqexcel点com]

简单点图

简单点图用孤立的点表示向量定义的数据。可以设置和修改点的标记类型、颜色和大小等属性。Excel中通过绘制点线图并隐藏折线,或者绘制散点图,或者逐个绘制点都可以实现点图的绘制。

Document Image
\[\]

图3-1 简单点图

本例绘制点线图并隐藏折线来实现点图的绘制。完整代码见:Samples->ch06 分类型图表->01 简单点图->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("B2:C11").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlXYScatter, 300, 20, 200, 300, True).Chart
  cht.Axes(1).MinimumScale = 0.04
  cht.Axes(1).MaximumScale = 0.22
  cht.Axes(2).MinimumScale = 0
  cht.Axes(2).MaximumScale = 11
  SetStyle cht
End Sub

运行代码生成图3-1。

复合点图

复合点图用多组不同颜色的点图表示多组分类数据。

Document Image
\[\]

图3-2 复合点图

下面用Excel文件data.xlsx中的数据绘制复合点图。完整代码见:Samples->ch06 分类型图表->02 复合点图->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  Dim intCount As Integer
  Dim intI As Integer
  ActiveSheet.Range("B2:C12").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, , 350, 20, 230, 380).Chart
  intCount = cht.SeriesCollection.Count
  If intCount > 0 Then
    For intI = intCount To 1 Step -1
      cht.SeriesCollection(intI).Delete
    Next
  End If
  cht.SeriesCollection.NewSeries
  cht.SeriesCollection(1).ChartType = xlXYScatter
  cht.SeriesCollection(1).XValues = Range("B2:B12")
  cht.SeriesCollection(1).Values = Range("D2:D12")
  cht.SeriesCollection.NewSeries
  cht.SeriesCollection(2).ChartType = xlXYScatter
  cht.SeriesCollection(2).XValues = Range("C2:C12")
  cht.SeriesCollection(2).Values = Range("D2:D12")
  cht.Axes(1).MinimumScale = 0.04
  cht.Axes(1).MaximumScale = 0.28
  cht.Axes(2).MinimumScale = 0
  cht.Axes(2).MaximumScale = 12
  SetStyle cht
End Sub

运行代码生成图3-2。

滑珠图

滑珠图实际上是交换x轴和y轴后的点图。此时y轴变成了分类轴,x轴变成了数值轴。简单滑珠图用一组点表现一组数据。

Document Image
\[\]

图3-3 滑珠图

复合滑珠图

复合滑珠图用多组滑珠表示多组分类数据,y轴是分类轴,x轴是数值轴。复合点图需要添加图例对各组点所表示的意义进行说明。

Document Image
\[\]

图3-4 复合滑珠图

下面用Excel文件data.xlsx中的数据绘制复合滑珠图。完整代码见:Samples->ch06 分类型图表->04 复合滑珠图->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  Dim intCount As Integer
  Dim intI As Integer
  ActiveSheet.Range("B2:C12").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, , 350, 20, 230, 380).Chart
  intCount = cht.SeriesCollection.Count
  If intCount > 0 Then
    For intI = intCount To 1 Step -1
      cht.SeriesCollection(intI).Delete
    Next
  End If
  cht.SeriesCollection.NewSeries
  cht.SeriesCollection(1).ChartType = xlXYScatter
  cht.SeriesCollection(1).XValues = Range("B2:B12")
  cht.SeriesCollection(1).Values = Range("D2:D12")
  cht.SeriesCollection.NewSeries
  cht.SeriesCollection(2).ChartType = xlXYScatter
  cht.SeriesCollection(2).XValues = Range("C2:C12")
  cht.SeriesCollection(2).Values = Range("D2:D12")
  cht.Axes(1).MinimumScale = 0.04
  cht.Axes(1).MaximumScale = 0.28
  cht.Axes(2).MinimumScale = 0
  cht.Axes(2).MaximumScale = 12
  SetStyle cht
End Sub

运行代码生成图3-4。

分区滑珠图

分区滑珠图将同一序列的滑珠绘在同一个分区,如图3-5所示,图中共有2个分区。

Document Image
\[\]

图3-5 分区滑珠图

下面用Excel文件data.xlsx中的数据绘制分区滑珠图。完整代码见:Samples->ch06 分类型图表->05 分区滑珠图->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  Dim intCount As Integer
  Dim intI As Integer
  ActiveSheet.Range("B2:C12").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, , 350, 20, 230, 380).Chart
  intCount = cht.SeriesCollection.Count
  If intCount > 0 Then
    For intI = intCount To 1 Step -1
      cht.SeriesCollection(intI).Delete
    Next
  End If
  cht.SeriesCollection.NewSeries
  cht.SeriesCollection(1).ChartType = xlXYScatter
  cht.SeriesCollection(1).XValues = Range("B2:B11")
  cht.SeriesCollection(1).Values = Range("D2:D11")
  cht.SeriesCollection.NewSeries
  cht.SeriesCollection(2).ChartType = xlXYScatter
  cht.SeriesCollection(2).XValues = Range("C2:C11")
  cht.SeriesCollection(2).Values = Range("E2:E11")
  cht.Axes(1).MinimumScale = 0.04
  cht.Axes(1).MaximumScale = 0.28
  cht.Axes(2).MinimumScale = 0
  cht.Axes(2).MaximumScale = 21
  SetStyle cht
End Sub

运行代码生成图3-5。

哑铃图

哑铃图如图2-10所示,将有2个序列的复合滑珠图中同一个分组的滑珠用直线段连接,就是哑铃图。该图形如一组哑铃,故而得名。

Document Image
\[\]

图3-6 哑铃图

下面用Excel文件data.xlsx中的数据绘制哑铃图。完整代码见:Samples->ch06 分类型图表->06 哑铃图->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  Dim intCount As Integer
  Dim intI As Integer
  ActiveSheet.Range("B2:C12").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, , 350, 20, 230, 380).Chart
  intCount = cht.SeriesCollection.Count
  If intCount > 0 Then
    For intI = intCount To 1 Step -1
      cht.SeriesCollection(intI).Delete
    Next
  End If
  cht.SeriesCollection.NewSeries
  cht.SeriesCollection(1).ChartType = xlXYScatter
  cht.SeriesCollection(1).XValues = Range("B2:B12")
  cht.SeriesCollection(1).Values = Range("D2:D12")
  cht.SeriesCollection.NewSeries
  cht.SeriesCollection(2).ChartType = xlXYScatter
  cht.SeriesCollection(2).XValues = Range("C2:C12")
  cht.SeriesCollection(2).Values = Range("D2:D12")
  cht.Axes(1).MinimumScale = 0.04
  cht.Axes(1).MaximumScale = 0.28
  cht.Axes(2).MinimumScale = 0
  cht.Axes(2).MaximumScale = 11
  SetStyle cht
End Sub

运行代码生成图3-6。