背景
上一篇文档:为python-docx增加chart支持(使用python-pptx库)中,介绍了给docx文档添加图表支持,但是,python-pptx中的图表编程接口功能有限,一些属性无法直接修改。下面介绍几种方法,实现对图表呈现的更多美化。
基于上篇文档的样例:
from docx import Document
from pptx.chart.data import CategoryChartData
from pptx.util import Inches
from pptx.enum.chart import XL_CHART_TYPE
doc = Document()
labels = ["1月", "2月", "3月"]
data = [25, 33, 18]
chart_data = CategoryChartData()
chart_data.categories = labels
chart_data.add_series("季度销售", data)
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(3)
chart = doc.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data)
doc.save("t.docx")
去除图表边框
添加图表时,默认会有边框,python-pptx没有直接设置是否显示边框的功能,可以如下操作:
from lxml import etree
xml = '<c:spPr><a:ln w="0"><a:noFill/></a:ln></c:spPr>'
parser = etree.XMLParser(recover=True)
element = etree.fromstring(xml, parser)
chart._chartSpace.append(element)
设置中文字体
python-pptx设置坐标轴或标签为中文字体时可能无效,造成实际字体显示有问题。可按如下修改:
def set_font(font, font_name):
font.name = font_name
east = font._rPr.find(qn("a:ea"))
if east is not None:
east.set("typeface", font.name)
else:
element = font._rPr.makeelement(qn("a:ea"))
element.set("typeface", font.name)
font._rPr.append(element)
category_axis = chart.category_axis
set_font(category_axis.tick_labels.font, u'楷体')
category_axis.tick_labels.font.size = Pt(9)