线形图

统计显示,科研期刊上用得最多的图表类型是线形图和柱状图,简单、好用。线形图包括简单线形图、复合线形图和平滑线形图等。

简单线形图

简单线形图用一条折线表示一组数据。

Document Image
\[\]

图4-1 简单线形图

下面的代码用给定数据绘制简单线形图。完整代码见:Samples->ch06 分类型图表->09 简单线形图->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:B11").Select  '数据
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlLine, 200, 20, 350, 220, True).Chart
  SetStyle cht, 0.05, 0.21
End Sub

运行代码生成图4-1。

复合线形图

复合线形图用多条折线表现矩阵数据,每一根折线构成一个序列,表现矩阵数据中的一行。不同的折线用不同的颜色、线型或标记进行区分。复合线形图需要添加图例对不同折线所表示的意义进行说明。

Document Image
\[\]

图4-2 复合线形图

下面的代码用给定的矩阵数据绘制复合线形图。完整代码见:Samples->ch06 分类型图表->10 复合线形图->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:C11").Select  '数据
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlLine, 200, 20, 350, 220, True).Chart
  SetStyle cht, 0.04, 0.28
End Sub

运行代码生成图4-2。

如果线形图上显示数据点的点标记,则该图又称为点线图。下面用相同数据绘制点线图。

Document Image
\[\]

图4-3 复合线形图

下面的代码用给定的矩阵数据绘制复合线形图,设置标记的属性。完整代码见:Samples->ch06 分类型图表->11 复合线形图2->py.py。

code.vba
Sub CreateChart2()
  Dim cht As Chart
  ActiveSheet.Range("A2:C11").Select  '数据
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlLineMarkers, 200, 20, 350, 220, True).Chart
  cht.SeriesCollection(2).MarkerStyle = xlMarkerStyleDiamond
  SetStyle cht, 0.04, 0.28
End Sub

运行代码生成图4-3。

平滑线形图

将绘图数据进行样条插值平滑处理后绘制线形图,图中的线条平滑,不再是折线,该图表称为平滑线形图。Excel中不需要自己平滑数据,可以直接生成平滑线形图。

Document Image
\[\]

图4-4 三维线形图

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

code.vba
Sub CreateChart()
  Dim cht As Chart
  Dim intCount As Integer
  Dim intI As Integer
  ActiveSheet.Range("B2:D11").Select  '数据
  Set cht = ActiveSheet.Shapes.AddChart2(-1, xlXYScatterSmoothNoMarkers, 350, 20, 350, 220).Chart
  SetStyle cht
End Sub

运行代码生成图4-4。

纵向线形图

交换普通线形图的横轴和纵轴,得到纵向线形图。纵向线形图的纵轴为分类轴,横轴为数值轴。

Document Image
\[\]

图4-5 纵向线形图

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

code.vba
Sub CreateChart()
  Dim cht As Chart
  Dim intCount As Integer
  Dim intI As Integer
  'ActiveSheet.Range("B2:D11").Select  '数据
  Set cht = ActiveSheet.Shapes.AddChart2(-1, , 350, 20, 270, 350).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 = xlXYScatterLines
  cht.SeriesCollection(1).Values = Range("D2:D11")
  cht.SeriesCollection(1).XValues = Range("B2:B11")
  cht.SeriesCollection.NewSeries
  cht.SeriesCollection(2).ChartType = xlXYScatterLines
  cht.SeriesCollection(2).Values = Range("D2:D11")
  cht.SeriesCollection(2).XValues = Range("C2:C11")
  cht.SeriesCollection(2).MarkerStyle = xlMarkerStyleDiamond
  cht.Axes(1).MinimumScale = 0.04
  cht.Axes(1).MaximumScale = 0.28
  cht.Axes(2).MinimumScale = 0
  cht.Axes(2).MaximumScale = 11
  cht.HasLegend = True
  SetStyle cht
End Sub

运行代码生成图4-5。

线形图+渐变色背景

如果觉得线形图有点单调,可以给线形图添加背景色。给图表添加背景色,将绘图区用单色或渐变色填充即可。

Document Image
\[\]

图4-6 给线形图设置渐变色背景

下面用Excel文件data.xlsx中的数据绘制复合线形图并给图表添加渐变色背景。完整代码见:Samples->ch06 分类型图表->14 线形图+渐变色背景->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:C11").Select  '数据
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlLine, 200, 20, 350, 250, True).Chart
  cht.PlotArea.Format.Fill.ForeColor.RGB = RGB(0, 0, 255)
  cht.PlotArea.Format.Fill.OneColorGradient msoGradientHorizontal, 1, 1
  SetStyle cht, 0.04, 0.28
End Sub

运行代码生成图4-6。

带形图

可以用带形图形元素在三维坐标系中表现一维数组或多个一维数组的数据。

Document Image
\[\]

图4-7 带形图

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

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:C11").Select  '数据
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xl3DLine, 200, 20, 350, 250, True).Chart
  SetStyle cht
End Sub

运行代码生成图4-7。