在学习matplotlib画图过程中,难免会碰到x轴、y轴刻度、图标题、图例显示中文的情况。但是发现matplotlib默认不会显示中文,需要经过字体设置才可以。笔者在解决问题的过程中遇到了些小问题并成功解决了,希望能够帮助到大家。

  此处选择绘制电影票房条形图作为案例讲解。

  可以看到在x轴的刻度上本应该显示各个电影的名字,但是却都变成了方框。

python matplotlib 中文显示 matplotlib title中文_开发语言

解决这个问题的主要思路是:设置一个字体变量my_font,让路径是你电脑里的本地字体,然后在需要显示中文的代码中,单独将字体设置为这个字体变量my_font即可。

第一步,找到你电脑中的中文字体路径。

  大多数电脑都存储在Fonts文件夹下,笔者电脑的字体保存在了c盘下,具体位置:C:\Windows\Fonts

python matplotlib 中文显示 matplotlib title中文_pycharm_02

假设我们想把中文字体设置为微软雅黑,就去找对象的字体 Microsoft YaHei UI。可以发现这里有3个字体,所以继续双击。

python matplotlib 中文显示 matplotlib title中文_matplotlib_03

可以看到雅黑有3种字体,我们选择第一个常规即可。

python matplotlib 中文显示 matplotlib title中文_matplotlib_04

需要注意的是,虽然字体是Microsoft YaHei UI 常规,但是字体路径名却不是这个。此时鼠标放在字体上鼠标右键点击属性。可以看到字体的命名是msyh.ttc

python matplotlib 中文显示 matplotlib title中文_开发语言_05

所以字体的路径是:

C:\Windows\Fonts\msyh.ttc

第二步,设置字体变量my_font

添加字体变量之前还需要导入font_manager

from matplotlib import font_manager

导入后,设置字体变量

my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")

 

python matplotlib 中文显示 matplotlib title中文_pycharm_06

前面的代码已经敲好了,接下来就要找到需要显示中文的代码部分。

第三步,找到显示中文的代码,添加my_font属性

在最开始的结果图可以看到x轴的ticks需要显示中文。

python matplotlib 中文显示 matplotlib title中文_matplotlib_07

将红框勾选的代码替换为:

# 设置字符串x轴
plt.xticks(range(len(a)),a,fontproperties=my_font,rotation=90)

中文就可以显示出来了。 

python matplotlib 中文显示 matplotlib title中文_pycharm_08

接下来附上本次案例代码:

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")

a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5\n:最后的骑士","摔跤吧!爸爸","加勒比海盗5\n:死无对证","金刚:骷髅岛","极限特工\n:终极回归",
     "生化危机6\n:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3\n:殊死一战","蜘蛛侠\n:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]

b = [56.01,26.94,17.53,16.49,15.15,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]

# 设置图形大小
plt.figure(figsize=(14,30),dpi=80)

# 绘制条形图
plt.bar(range(len(a)),b,width=0.3)

# 设置字符串x轴
plt.xticks(range(len(a)),a,fontproperties=my_font,rotation=90)

plt.show()
# plt.savefig("./t6.png")

 同时,这个案例有不足之处,再附上横向条形图的代码。

python matplotlib 中文显示 matplotlib title中文_pycharm_09

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")

a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归",
     "生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]

b = [56.01,26.94,17.53,16.49,15.15,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]

# 设置图形大小
plt.figure(figsize=(20,8),dpi=80)

# 绘制条形图
plt.barh(range(len(a)),b,height=0.3,color="orange")

# 设置字符串y轴
plt.yticks(range(len(a)),a,fontproperties=my_font)

plt.grid(alpha=0.3)

plt.show()
# plt.savefig("./t7.png")