当前位置:  首页>> 技术小册>> Python与办公-玩转PPT

散点图就是在图表上画一些点,这些点的位置由它们的x、y坐标决定,先来简单看看python-pptx绘制散点图的方法吧。假设我们要画两组数据,每组数据就只有三个点,代码如下:

  1. from pptx import Presentation
  2. from pptx.chart.data import XyChartData
  3. from pptx.enum.chart import XL_CHART_TYPE
  4. from pptx.util import Cm
  5. ppt = Presentation()
  6. chart_data = XyChartData()
  7. series_1 = chart_data.add_series'系列1'
  8. series_1.add_data_point(0.7,2.7)
  9. series_1.add_data_point(1.8,3.2)
  10. series_1.add_data_point(2.6,0.8)
  11. series_2 = chart_data.add_series'系列2'
  12. series_2.add_data_point(1.3,3.7)
  13. series_2.add_data_point(2.7,2.3)
  14. series_2.add_data_point(1.6,1.8)
  15. slide = ppt.slides.add_slide(ppt.slide_layouts[6])
  16. x = y = Cm(3)
  17. width = Cm(20)
  18. height = Cm(10)
  19. slide.shapes.add_chart(
  20. XL_CHART_TYPE.XY_SCATTER,x,y,width,height,chart_data
  21. )
  22. ppt.save("./ppt_ files/test.pptx")

散点图的数据与柱状图的不同,因为它只有x、y两个值,所以要实例化一个XyChartData对象去存储,调用它的add_series()方法新增一个系列,也就是一组数据,你有几组就调用几次。每个系列对象都是通过调用add_data_point()方法把点的x、y坐标添加进去,最后调用slide.shapes.add_chart()方法创建一个散点图,散点图的图表类型是XL_CHART_TYPE.XY_SCATTER,至于散点图的位置和宽高的设置方法就不用多说了,和柱状图的设置方法一致。

我们不妨把之前的四个季度的不同类型产品销量也做成一个散点图,x轴是季度,y轴是销量,每一个分类都是一个系列,可以想想这代码应该怎么写,其实不难,就把上面的简单散点图的数据稍微改一下就行,自己思考之后再参考我的代码:

  1. from pptx import Presentation
  2. from pptx.chart.data import XyChartData
  3. from pptx.enum.chart import XL_CHART_TYPE
  4. from pptx.util import Cm
  5. ppt = Presentation()
  6. chart_data = XyChartData()
  7. sale_info = [
  8. {"category":"数码娱乐","sale_volume":[36.6,21.1,15.9,
  9. 20.4]},
  10. {"category":"生活用品","sale_volume":[65.5,52.1,22.3,
  11. 35.3]},
  12. {"category":"文化用品","sale_volume":[10.0,3.1,9.8,3.2]},
  13. ]
  14. for info in sale_info:
  15. series = chart_data.add_series(info.get("category"))
  16. for quarter,volume in enumerate(info.get("sale_volume")):
  17. series.add_data_point(quarter + 1,volume,number_
  18. format='0"季度"')
  19. slide = ppt.slides.add_slide(ppt.slide_layouts[6])
  20. x = y = Cm(3)
  21. width = Cm(20)
  22. height = Cm(10)
  23. chart = slide.shapes.add_chart(
  24. XL_CHART_TYPE.XY_SCATTER,x,y,width,height,chart_data
  25. ).chart
  26. x_axis = chart.category_axis
  27. x_axis.has_title = True
  28. x_axis.axis_title.text_frame.text = "季度"
  29. y_axis = chart.value_axis
  30. y_axis.has_title = True
  31. y_axis.axis_title.text_frame.text = "销量"
  32. chart.has_legend = True
  33. ppt.save("./ppt_ files/test.pptx")

为了方便读取数据,我把销售数据放在一个列表里,然后再通过遍历的方式读取每一个系列的数据,如果对遍历的写法已经熟悉了,那么应该是很容易看懂的。添加好散点图之后,再修改一下x、y坐标轴的标题,先获取坐标轴,然后把坐标轴的has_title属性设置为True,这样就可以显示标题了。标题的文本存储在axis_title属性里,访问该属性就能得到一个文本框,关于TextFrame对象,前面已经学习过了,这里就看你对它的熟悉程度了。


该分类下的相关小册推荐: