点图用一组或多组点表示向量或矩阵定义的数据。点图有一个坐标轴表示分类数据,可以是横轴,也可以是纵轴。横轴为分类轴时称为点图,纵轴为分类轴时常称为滑珠图。后面介绍的散点图也是用点集表示点数据,但它的横轴和纵轴都是数值轴,两种图的作用也完全不同。点图的特点是简洁明了。[大谦Excel,dqexcel点com]
简单点图
简单点图用孤立的点表示向量定义的数据。可以设置和修改点的标记类型、颜色和大小等属性。Excel中通过绘制点线图并隐藏折线,或者绘制散点图,或者逐个绘制点都可以实现点图的绘制。
图3-1 简单点图
本例绘制点线图并隐藏折线来实现点图的绘制。完整代码见:Samples->ch06 分类型图表->01 简单点图->py.py。
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。
复合点图
复合点图用多组不同颜色的点图表示多组分类数据。
图3-2 复合点图
下面用Excel文件data.xlsx中的数据绘制复合点图。完整代码见:Samples->ch06 分类型图表->02 复合点图->py.py。
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轴变成了数值轴。简单滑珠图用一组点表现一组数据。
图3-3 滑珠图
复合滑珠图
复合滑珠图用多组滑珠表示多组分类数据,y轴是分类轴,x轴是数值轴。复合点图需要添加图例对各组点所表示的意义进行说明。
图3-4 复合滑珠图
下面用Excel文件data.xlsx中的数据绘制复合滑珠图。完整代码见:Samples->ch06 分类型图表->04 复合滑珠图->py.py。
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个分区。
图3-5 分区滑珠图
下面用Excel文件data.xlsx中的数据绘制分区滑珠图。完整代码见:Samples->ch06 分类型图表->05 分区滑珠图->py.py。
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个序列的复合滑珠图中同一个分组的滑珠用直线段连接,就是哑铃图。该图形如一组哑铃,故而得名。
图3-6 哑铃图
下面用Excel文件data.xlsx中的数据绘制哑铃图。完整代码见:Samples->ch06 分类型图表->06 哑铃图->py.py。
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。