matplotlib

matplotlib 是一个用于 科学计算绘图Python 包,功能非常强大,堪比 Matlab !开始前,先通过几张图来感受一下:

../../_images/93498df23549c42e72dcd5361dce6f7b.png

快速开始

饼状图应该是最简单的统计图表了,用以介绍 matplotlib 画图方式最为合适。数据准备就绪,生成饼状图只需若干行代码:

/_src/libs/matplotlib/pie.py

  1. import matplotlib.pyplot as plt
  2.  
  3. # data to plot
  4. labels = ('Python', 'C++', 'Ruby', 'Java',)
  5. sizes = (215, 130, 245, 210,)
  6.  
  7. colors = ('gold', 'yellowgreen', 'lightcoral', 'lightskyblue',)
  8.  
  9. plt.pie(
  10. sizes,
  11. labels=labels,
  12. colors=colors,
  13. autopct='%1.1f%%',
  14. )
  15.  
  16. plt.title("Programming Languages")
  17.  
  18. plt.show()

4-5 行,为待渲染数据,包括 数值 以及 标签 ;第 7 行,定义渲染 颜色 ;第 9-14 行,配置饼图,包括数值、标签、颜色以及百分比展示;第 16 行,为图表追加 标题 ;第 18 行,将图表展示出来。

运行程序后,画出的图表效果如下:

../../_images/ca76641457d181dd6713f2f5d6681164.png

字体

在编程世界,中文一直是个麻烦事。不折腾一番, matplotlib 是不能渲染中文文本的。

matplotlib支持中文 的方式有不少,接下来介绍一种最简单的:准备好字体文件,为文本定义 FontProperties 并设置。除了指定 字体FontProperties 还支持 字号粗细斜体下划线 等属性设置。

/_src/libs/matplotlib/font.py

  1. import matplotlib.pyplot as plt
  2. import matplotlib.font_manager as mfm
  3.  
  4. fonts = (
  5. ('微软雅黑', 'Downloads/Microsoft Yahei.ttf',),
  6. ('中易黑体', 'Downloads/SimHei.ttf',),
  7. ('仿宋', 'Downloads/FangSong.ttf',),
  8. ('宋体', 'Downloads/STSong.ttf',),
  9. )
  10.  
  11. # load font files
  12. label_fonts = tuple(
  13. mfm.FontProperties(fname=path, size=10)
  14. for _, path in fonts
  15. )
  16.  
  17. title_fonts = label_fonts[0].copy()
  18. title_fonts.set_size(18)
  19.  
  20. # data to plot
  21. labels = [name for name, _ in fonts]
  22. sizes = (215, 130, 245, 210,)
  23.  
  24. colors = ('gold', 'yellowgreen', 'lightcoral', 'lightskyblue',)
  25.  
  26. patches, texts, autotexts = plt.pie(
  27. sizes,
  28. labels=labels,
  29. colors=colors,
  30. autopct='%1.1f%%',
  31. )
  32.  
  33. for text, font in zip(texts, label_fonts):
  34. text.set_fontproperties(font)
  35.  
  36. plt.title("编程语言", fontproperties=title_fonts)
  37.  
  38. plt.show()

程序第 11-15 行加载字体文件,并设置字号;第 17-18 行在第一个标签字体基础上设置新字号,作为标题字体,第 33-34 行为 4 个标签分别设置字体;第 36 行指定标题,同时设置标题字体。

运行程序后,画出的图表效果如下:

../../_images/47e3e92e52e71feb5b01afe83a5b4135.png

注解

Github 上有个项目提供一些字体文件,以供测试: dolbydu/font

保存图片

将图表保存成文件,只需调用 savefig 方法。保存为 PNG 图片:

  1. plt.savefig('foo.png')

文件格式由文件后缀名决定,另存为 PDF 文件:

  1. plt.savefig('foo.pdf')

如果仅需获取保存文件内容,则可借助 BytesIO

  1. import io
  2.  
  3. bio = io.BytesIO()
  4. plt.savefig(bio, format='png')
  5.  
  6. bio.seek(0)
  7. content = bio.read()

下一步

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../../_images/wechat-mp-qrcode.png小菜学编程

参考文献