python无法显示中文_Python 关于matplotlib无法显示中文字体的解决方法

以下面的例子说明如何解决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()

运行出来的图像如下:

89a08937c351

image.png

可以看出来图像中中文并没有显示出来,那么如何解决呢?下面提供三种方法,实质上第一第二种方法是一样的:

第一种:

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()

这时运行出来的结果就有中文了:

89a08937c351

image.png

第二种方法:

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()

运行结果如下,完美解决了中文不显示问题:

89a08937c351

image.png

第三种方法:

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()

运行出图像如下:

89a08937c351

image.png

这种方法除了麻烦之外,可以看出虽然纵坐标和标题的中文都显示出来了,但是横坐标从第二项开始就还是不显示...

推荐第一二种方法,第三种方法不知道是什么原因导致仍有未显示的中文,望各位大佬有空闲时能帮忙分析一下原因,交流一下~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值