要想图表美观,除了配色渲染外,图表的样式和布局也很重要。样式指的是图表元素以什么样的形式呈现,比如是否加图框、绘图区背景怎么设置、坐标轴上是否显示刻度线、是否显示网格等。布局指的是图表中图形元素怎么摆放、它们之间的间隔等。布局需要遵守一些基本的审美原则,如留白、主次、疏密和取舍等。[大谦Excel,dqexcel点com]
Excel图表的内置样式
Excel可以创建近百种图表类型,对于每种图表类型,Excel内置了多种图表样式,通过简单的设置,可以将当前绘制的图表修改为指定样式。
通过编程绘图时,每种内置样式有自己的编号和名称。对当前绘制的图表使用指定编号或名称的样式就可以快速进行修改。下面创建复合线形图,给它应用不同的内置样式。完整代码见:Samples->ch04 美化Excel图表->25 设置图表的样式->py.py。
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。
图1-35 对复合线形图使用内置样式
自定义样式
除了使用Excel内置的样式外,还可以自定义样式。Excel默认图表样式偏商业图表或工作型图表,需要自己定义适合科研图表的图表样式。
本书的示例代码中,绝大多数代码都有一个set_style函数,使用该函数给当前图表自定义样式。下面的代码定义并使用set_style函数实现自定义图表样式。完整代码见:Samples->ch04 美化Excel图表->27 自定义图表样式->py.py。
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。
图1-37 自定义图表样式
布局章法:留白
人生忌满,绘图亦如是。传统审美认为,不管画画还是书法,甚至文章的排版,内容都不要占满整个稿纸或页面,而是要在四周留出适当的空白。
用Excel绘图时需要注意,除特殊类型的图表外,图表中的图形元素如柱状图的柱面、线形图的折线等不要占满整个绘图区,适当留出一些空白。标注的文字不要太多,特别是不要把绘图区内图表以外的空间占满。。
布局章法:主次
绘图时要把主要的内容放在突出的位置,常犯的错误是,坐标去背景颜色过于醒目,或过于杂乱;图表元素如图例、色条等过大等。要突出图表主体部分,不能让背景、图例、色条和标题等附属部分喧宾夺主。
布局章法:疏密
图表中对象的布局不能过密,也不能过稀。如复合柱状图分组内部柱面之间的距离和分组之间的距离要合适。如果感觉点图、线形图等图表不够饱满,可以添加网格线,添加背景色等。有的期刊对图表有标注字数的要求,要求标注字数不能超过多少字。标注字数太多,或者标注太多,都会影响图表的美观。
布局章法:取舍
绘图时,没有必要把所有信息都添加到图表上。尽管出发点是好的,是希望图表能反映尽可能多的信息。但是当美观和实用起了冲突,需要进行取舍。常见的错误是将很多信息显示在饼图的扇区上,甚至挤满整个扇区。有的图表类型会自动标注图形元素,如果标签过多导致出现重叠时,要考虑只显示部分标签。