python matplotlib中文字体无法显示问题
程序员文章站
2022-04-22 07:52:19
...
以下面的例子说明如何解决matplotlib画图中出现中文字体无法显示问题
要画出10-12点气温变化的图像
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_ticks = ['10点{}分'.format(i) for i in range(60)]
x_ticks += ['11点{}分'.format(i) for i in range(60)]
plt.xticks(list(x)[::3],x_ticks[::3],rotation=45)
plt.xlabel('时间')
plt.ylabel('温度:单位(℃)')
plt.title('十点到十二点气温变化情况')
plt.show()
运行出来的图像如下:
可以看出来图像中中文并没有显示出来,那么如何解决呢?下面提供三种方法,实质上第一第二种方法是一样的:
第一种:
from matplotlib import pyplot as plt
import random
import matplotlib as mpl
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)
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 微软雅黑
mpl.rcParams['font.serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
x_ticks = ['10点{}分'.format(i) for i in range(60)]
x_ticks += ['11点{}分'.format(i) for i in range(60)]
plt.xticks(list(x)[::3],x_ticks[::3],rotation=45)
plt.xlabel('时间')
plt.ylabel('温度:单位(℃)')
plt.title('十点到十二点气温变化情况')
plt.show()
这时运行出来的结果就有中文了:
第二种方法:
from matplotlib import pyplot as plt
import random
import matplotlib
x = range(0,120)
y = [random.randint(20,35) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
font = {'family' : 'Microsoft YaHei',
'weight' : 'bold',
'size' : '12'}
matplotlib.rc('font', **font)
plt.plot(x,y)
x_ticks = ['10点{}分'.format(i) for i in range(60)]
x_ticks += ['11点{}分'.format(i) for i in range(60)]
plt.xticks(list(x)[::3],x_ticks[::3],rotation=45)
plt.xlabel('时间')
plt.ylabel('温度:单位(℃)')
plt.title('十点到十二点气温变化情况')
plt.show()
运行结果如下,完美解决了中文不显示问题:
第三种方法:
from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
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)
my_font = font_manager.FontProperties(fname='C:\WINDOWS\FONTS\MSYHL.TTC') # win字体路径可在左下角搜索栏中输入字体查看
_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,fontproperties=my_font)
plt.xlabel('时间',fontproperties=my_font)
plt.ylabel('温度:单位(℃)',fontproperties=my_font)
plt.title('十点到十二点气温变化情况',fontproperties=my_font)
plt.show()
运行出图像如下:
这种方法除了麻烦之外,可以看出虽然纵坐标和标题的中文都显示出来了,但是横坐标从第二项开始就还是不显示…
推荐第一二种方法,第三种方法不知道是什么原因导致仍有未显示的中文,望各位大佬有空闲时能帮忙分析一下原因,交流一下~
推荐阅读
-
完美解决input[type=number]无法显示非数字字符的问题
-
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
-
解决Python中定时任务线程无法自动退出的问题
-
解决Vue 项目打包后favicon无法正常显示的问题
-
怎么解决压缩文件不能打开显示无法找到应用程序的问题
-
php的webservice的wsdl的XML无法显示问题的解决方法
-
IE浏览器的语言显示问题(无法显示网页文字/按钮使用语言)
-
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
-
完美解决Python matplotlib绘图时汉字显示不正常的问题
-
解决python中使用plot画图,图不显示的问题