Python数据分析之matplotlib中文显示

以后尝试将笔记搬到csdn上,希望能帮到有需要的人。

matplotlib的中文显示问题网上有很多答案,但自己在使用的时候,就算是参考了其他人的答案,也出了一些问题,特此记录一篇。

代码可以在jupyter notebook中运行

import random
import matplotlib.pyplot as plt
%matplotlib inline

# 生成绘图数据
# x1表示9.1-9.30;x2表示10.1-10.31
# y1表示9月份每天的平均气温;y2表示10月份每天的平均气温
x1 = range(30)
x2 = range(31)
y1 = [float(format(random.uniform(20, 30), '.1f')) for i in range(30)]
y2 = [float(format(random.uniform(18, 25), '.1f')) for i in range(31)]

plt.plot(x1, y1, label='9月')
plt.plot(x2, y2, label='10月')
plt.title('9、10月的平均气温变化')
plt.xlabel('日期')
plt.ylabel('温度')
plt.legend(title='月份')

生成图片:
原始图片
此时会发现,图片中所有的中文都无法正常显示。一般可以采用两类方法:

  1. 方法一:导入font_manager,自定义myfont,然后在需要中文显示的语句中,将myfont传入即可。注意plt.legend()中参数和别的不同。
from matplotlib import font_manager

#fname后接字体的地址,我的字体是网上下载的黑体,默认是三个文件msyh.ttc、msyhbd.ttc、msyhl.ttc,任选一个
myfont = font_manager.FontProperties(fname='E:/Python数据分析/fonts/msyhl.ttc')

plt.plot(x1, y1, label='9月')
plt.plot(x2, y2, label='10月')
plt.title('9、10月的平均气温变化', fontproperties=myfont)
plt.xlabel('日期', fontproperties=myfont)
plt.ylabel('温度', fontproperties=myfont)
plt.legend(title='月份', prop=myfont)

方法一图片
看图片会发现,该方法plt.legend()的title参数中的中文,仍然无法正常显示,我没有找到解决方法,有知道的小伙伴,可以留言,感激不尽!

  1. 方法二:设置font,将font传入matplotlib.rc()中
import matplotlib
font = {'family':'SimHei'}
#font中还可以添加参数'weight':'bold', 'size':10
matplotlib.rc('font', **font)

plt.plot(x1, y1, label='9月')
plt.plot(x2, y2, label='10月')
plt.title('9、10月的平均气温变化')
plt.xlabel('日期')
plt.ylabel('温度')
plt.legend(title='月份')

方法二图片
方法二优点:

  1. 只需要在开头设置好,代码中不需要设置其他参数;
  2. 所有的中文都可以显示。

方法二缺点:

  1. 有的系统可能不支持该方法(B站视频课老师讲的)
  2. 'family’后的字体名字一定要写对,否则也是不显示中文滴。

方法二也可以如下:为表述清晰,称为方法三

# 显示中文sans-serif为matplotlib默认的字体,不支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False

plt.plot(x1, y1, label='9月')
plt.plot(x2, y2, label='10月')
plt.title('9、10月的平均气温变化')
plt.xlabel('日期')
plt.ylabel('温度')
plt.legend(title='月份')

方法三图片
方法二设置成功后,jupyter notebook中的所有程序,中文都可以正常显示,需要重启一下,验证方法三,所以最后一张图的数据和其他的图片不同。
plt.legend()中的loc参数表示图例的位置,不设置时,会自动选择最好的位置。因此两张图片中,图例的位置也不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值