1、问题描述
使用matplotlib绘制图表时出现显示错误,以气温绘制为例
from matplotlib import pyplot as plt
import random
x = range(0,120)
y = [random.randint(20,35) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
#调整x轴的刻度
_xtick_labels = ["10点{}分".format(i) for i in range(60)]
_xtick_labels += ["11点{}分".format(i) for i in range(60)]
plt.xticks(list(x)[::3], _xtick_labels[::3], rotation=45)
plt.xlabel("时间")
plt.ylabel("温度 单位(°C)")
plt.title("10点到12点每分钟的气温变化情况")
plt.show()
从图中可以看到中文无法正常显示
2、解决方案
1)使用matplotlib.rcParams
# 使用matplotlib.rcParams
matplotlib.rcParams['font.sans-serif']=['SimHei']
# 支持负号显示
matplotlib.rcParams['axes.unicode_minus']=False
plt.xlabel("时间")
plt.ylabel("温度 单位(°C)")
plt.title("10点到12点每分钟的气温变化情况")
plt.show()
再次运行就可以看到显示正常了
2)使用Matplotlib中的font_manager
# 使用font_manager
my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc")
#取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(list(x)[::3],_xtick_labels[::3],rotation=45,fontproperties=my_font) #rotaion旋转的度数
#添加描述信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度 单位(℃)",fontproperties=my_font)
plt.title("10点到12点每分钟的气温变化情况",fontproperties=my_font)
plt.show()
再次运行即可得到正确显示结果
补充内容:
在windows平台下字体路径位于C:\Windows\Fonts,如图所示: