问题描述

在百度的课程《Python小白逆袭大神》中,day3的作业是可视化爬取的《青春有你2》选手数据:绘制小姐姐籍贯分布直方图,X轴为籍贯,Y轴为该籍贯的小姐姐的数量
matplotlib的中文显示会有问题,百度课程给出的解决方案是

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import json
  4. import matplotlib.font_manager as font_manager
  5. # 下载中文字体
  6. !wget https://mydueros.cdn.bcebos.com/font/simhei.ttf
  7. # 将字体文件复制到matplotlib字体路径
  8. !cp simhei.ttf /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/
  9. # 一般只需要将字体文件复制到系统字体目录下即可,但是在aistudio上该路径没有写权限,所以此方法不能用
  10. # !cp simhei.ttf /usr/share/fonts/
  11. # 创建系统字体文件路径
  12. !mkdir .fonts
  13. # 复制文件到该路径
  14. !cp simhei.ttf .fonts/
  15. !rm -rf .cache/matplotlib
  16. plt.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体
  17. plt.rcParams['axes.unicode_minus'] = False #解决保存图像是负号'-'显示为方块的问题

这其中有2个问题

  1. 找不到参数font.sans-serif
  2. 该链接https://mydueros.cdn.bcebos.com/font/simhei.ttf无法访问

解决方法

问题解决参考
https://aistudio.baidu.com/aistudio/projectdetail/390895?channelType=0&channel=0 如何在AI Studio数据可视化图像中显示汉字
https://www.jianshu.com/p/7d4f88c62815 Ubuntu 中使用 matplotlib 画图如何正常显示中文

从第一个链接可以知道,输入指令可以查看有什么字体支持中文
第一个链接的内容是20年的,当时没有支持中文的字体

  1. # 查看系统可用的ttf格式中文字体
  2. !fc-list :lang=zh | grep ".ttf

现在是21年,paddle更新了中文字体
上述指令的输出
/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf: Droid Sans Fallback:style=Regular

因此,指定matplotlib的字体就可以了 ,通过FontProperties属性
(该字体不是上面显示的,但是也可以用。不懂上面的指令为什么没有找到该字体)

  1. import matplotlib.font_manager as font_manager
  2. import matplotlib.pyplot as plt
  3. myfont = font_manager.FontProperties(fname='/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc')
  4. plt.title('''《青春有你2》参赛选手''',fontsize = 24,FontProperties=myfont)

image.png