样式和布局

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

Excel图表的内置样式

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

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

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1')    #获取指定工作表对象
sht.api.Range('A2:C11').Select()    #数据
cht1=sht.api.Shapes.AddChart2(228,xw.constants.ChartType.xlLine,10,20,350,250,True).Chart
cht2=sht.api.Shapes.AddChart2(230,xw.constants.ChartType.xlLine,20,20,350,250,True).Chart
cht3=sht.api.Shapes.AddChart2(232,xw.constants.ChartType.xlLine,30,20,350,250,True).Chart
cht4=sht.api.Shapes.AddChart2(233,xw.constants.ChartType.xlLine,40,20,350,250,True).Chart

运行代码生成图1-35。

Document Image Document Image

Document Image Document Image

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

下面创建复合柱状图,给它应用不同的内置样式。完整代码见:Samples->ch04 美化Excel图表->26 设置图表的样式2->py.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1')    #获取指定工作表对象
sht.api.Range('A2:C11').Select()    #数据
cht1=sht.api.Shapes.AddChart2(205,xw.constants.ChartType.xlColumnClustered,\
10,20,350,250,True).Chart
cht2=sht.api.Shapes.AddChart2(202,xw.constants.ChartType.xlColumnClustered,\
20,20,350,250,True).Chart
cht3=sht.api.Shapes.AddChart2(208,xw.constants.ChartType.xlColumnClustered,\
30,20,350,250,True).Chart
cht4=sht.api.Shapes.AddChart2(209,xw.constants.ChartType.xlColumnClustered,\
40,20,350,250,True).Chart

运行代码生成图1-36。

Document Image Document Image

Document Image Document Image

图1-36 对复合柱状图使用内置样式

自定义样式

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

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

code.python
import xlwings as xw    #导入xlwings包
import os    #导入OS包
def set_style(cht)    #设置样式:
    cht.ChartArea.Format.Line.Visible=False    #图表区外框不可见
    cht.PlotArea.Format.Fill.Visible=False    #绘图区区域不可见
    cht.PlotArea.Format.Line.Visible=True    #绘图区外框可见
    cht.PlotArea.Format.Line.ForeColor.RGB=xw.utils.rgb_to_int((200,200,200))    #外框颜色
    ax1=cht.Axes(1)    #获取横轴
    ax2=cht.Axes(2)    #获取纵轴
    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    #显示纵轴主网格线
    cht.HasTitle=True    #显示图表标题
    #cht.ChartTitle.Caption='Plot'    #图表标题文本内容
    #cht.ChartTitle.Font.Size=12    #图表标题文本字体大小
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1')    #获取指定工作表对象
sht.api.Range('A2:C8').Select()    #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,20,20,350,250,True)
cht=shp.Chart    #获取图表
cht.SeriesCollection(1).ChartType=xw.constants.ChartType.xlLine    #序列1改为折线图
set_style(cht)    #设置样式

运行代码生成图1-37。

Document Image

图1-37 自定义图表样式

布局章法:留白

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

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

布局章法:主次

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

布局章法:疏密

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

布局章法:取舍

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