样式和布局

要想图表美观,除了配色渲染外,图表的样式和布局也很重要。样式指的是图表元素以什么样的形式呈现,比如是否加图框、绘图区背景怎么设置、坐标轴上是否显示刻度线、是否显示网格等。布局指的是图表中图形元素怎么摆放、它们之间的间隔等。布局需要遵守一些基本的审美原则,如留白、主次、疏密和取舍等。[大谦Excel,dqexcel点com]

Excel图表的内置样式

Excel可以创建近百种图表类型,对于每种图表类型,Excel内置了多种图表样式,通过简单的设置,可以将当前绘制的图表修改为指定样式。

通过编程绘图时,每种内置样式有自己的编号和名称。对当前绘制的图表使用指定编号或名称的样式就可以快速进行修改。下面创建复合线形图,给它应用不同的内置样式。完整代码见:Samples->ch04 美化Excel图表->25 设置图表的样式->py.py。

code.vba
Sub Test()
    Range("A2:C11").Select
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$C$11")
    ActiveChart.ClearToMatchStyle
    ActiveChart.ChartStyle = 228
    ActiveSheet.Shapes("Chart 3").IncrementLeft 311.25
    ActiveSheet.Shapes("Chart 3").IncrementTop 75.75
    Range("A2:C11").Select
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$C$11")
    ActiveChart.ClearToMatchStyle
    ActiveChart.ChartStyle = 230
    ActiveSheet.Shapes("Chart 4").IncrementLeft 312
    ActiveSheet.Shapes("Chart 4").IncrementTop -76.5
    Range("A2:C11").Select
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$C$11")
    ActiveSheet.Shapes("Chart 5").IncrementLeft -54.75
    ActiveSheet.Shapes("Chart 5").IncrementTop 6.75
    ActiveChart.ClearToMatchStyle
    ActiveChart.ChartStyle = 232
    ActiveSheet.Shapes("Chart 5").IncrementLeft 3
    ActiveSheet.Shapes("Chart 5").IncrementTop 79.5
    Range("A2:C11").Select
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$C$11")
    ActiveChart.ClearToMatchStyle
    ActiveChart.ChartStyle = 233
    ActiveSheet.Shapes("Chart 7").IncrementLeft -49.5
    ActiveSheet.Shapes("Chart 7").IncrementTop -75
    Range("B15").Select
    ActiveWorkbook.Save
End Sub

运行代码生成图1-35。

Document Image Document Image

Document Image Document Image

图1-35 对复合线形图使用内置样式

自定义样式

除了使用Excel内置的样式外,还可以自定义样式。Excel默认图表样式偏商业图表或工作型图表,需要自己定义适合科研图表的图表样式。

本书的示例代码中,绝大多数代码都有一个set_style函数,使用该函数给当前图表自定义样式。下面的代码定义并使用set_style函数实现自定义图表样式。完整代码见:Samples->ch04 美化Excel图表->27 自定义图表样式->py.py。

code.vba
Sub SetStyle(cht As Chart, dblMinY As Double, dblMaxY As Double)
  cht.ChartArea.Format.Line.Visible = msoFalse
  cht.PlotArea.Format.Fill.Visible = msoFalse
  With cht.PlotArea.Format.Line
    .Visible = msoTrue
    .ForeColor.RGB = RGB(200, 200, 200)
  End With
  Dim ax1 As Axis
  Dim ax2 As Axis
  Set ax1 = cht.Axes(1)
  Set ax2 = cht.Axes(2)
  ax2.HasMajorGridlines = False
  ax1.HasTitle = True
  ax1.AxisTitle.Text = "Categories"
  ax1.AxisTitle.Font.Size = 10
  ax1.TickLabels.Font.Size = 8
  'ax1.TickLabels.NumberFormat = "0.00"
  'ax1.HasMajorGridlines = True
  ax2.HasTitle = True
  ax2.AxisTitle.Text = "Values"
  ax2.AxisTitle.Font.Size = 10
  ax2.TickLabels.Font.Size = 8
  'ax2.HasMajorGridlines = True
  ax2.MinimumScale = dblMinY
  ax2.MaximumScale = dblMaxY
  cht.HasTitle = True
  'cht.ChartTitle.Caption = "KDE Plot"
  'cht.ChartTitle.Font.Size = 12
End Sub

运行代码生成图1-37。

Document Image

图1-37 自定义图表样式

布局章法:留白

人生忌满,绘图亦如是。传统审美认为,不管画画还是书法,甚至文章的排版,内容都不要占满整个稿纸或页面,而是要在四周留出适当的空白。

用Excel绘图时需要注意,除特殊类型的图表外,图表中的图形元素如柱状图的柱面、线形图的折线等不要占满整个绘图区,适当留出一些空白。标注的文字不要太多,特别是不要把绘图区内图表以外的空间占满。。

布局章法:主次

绘图时要把主要的内容放在突出的位置,常犯的错误是,坐标去背景颜色过于醒目,或过于杂乱;图表元素如图例、色条等过大等。要突出图表主体部分,不能让背景、图例、色条和标题等附属部分喧宾夺主。

布局章法:疏密

图表中对象的布局不能过密,也不能过稀。如复合柱状图分组内部柱面之间的距离和分组之间的距离要合适。如果感觉点图、线形图等图表不够饱满,可以添加网格线,添加背景色等。有的期刊对图表有标注字数的要求,要求标注字数不能超过多少字。标注字数太多,或者标注太多,都会影响图表的美观。

布局章法:取舍

绘图时,没有必要把所有信息都添加到图表上。尽管出发点是好的,是希望图表能反映尽可能多的信息。但是当美观和实用起了冲突,需要进行取舍。常见的错误是将很多信息显示在饼图的扇区上,甚至挤满整个扇区。有的图表类型会自动标注图形元素,如果标签过多导致出现重叠时,要考虑只显示部分标签。