matplotlib正常显示中文教程

问题展示

源码

import matplotlib.pyplot as plt
import random

# 1、准备数据 x y
x = range(60)
y = [random.uniform(15,18) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y)

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5))

# 4、显示图像
plt.show()

结果

原本要输出的中文变成了方框。 原因是matplotlib是由外国人写的,不支持中文显示

解决方法

有两种解决方法,一种是一劳永逸的(如果重新安装库的话或者新建虚拟环境的话还是要重新配置的),一种是每次都要执行的。 先讲简单的。

解决方法一

在代码中加入这两行代码

# 解决中文问题
plt.rcParams[font.sans-serif]=[SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus]=False # 用来正常显示负号

源码

import matplotlib.pyplot as plt
import random

# 解决中文问题
plt.rcParams[font.sans-serif]=[SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus]=False # 用来正常显示负号

# 1、准备数据 x y
x = range(60)
y = [random.uniform(15,18) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y)

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5))

# 4、显示图像
plt.show()

结果

已解决

解决方法二

检查字体

下载SimHei字体(即黑体)(或者其他的支持中文显示的字体也行) 大多数电脑都自带,没有的可以点击以下链接进行下载: 阿里云盘 链接: 提取码:F5DQ 百度网盘 链接: 提取码:q6s2

查看电脑字体

路径:C:WindowsFonts

查看位置

查看matplotlib配置文件位置

import matplotlib
print(matplotlib.matplotlib_fname())
    输出 C:Usersz2000miniconda3libsitepackagesmatplotlibmpl-datamatplotlibrc 每个人都路径都不相同,建议都查一遍。只需要复制到mpl-data即可。

复制文件

拷贝simhei.ttf文件到mpl-data目录下fonts tf

修改配置文件

修改配置文件matplotlibrc,在尾部追加如下内容 用记事本打开即可

font.family			:sans-serif
font.sans-serif		:SimHei
axes.unicode_minus	:False

删除缓存

删除matplotlib中的缓存文件(Windows不需要) Mac系统 删除~/.matplotlib中的缓存文件

cd ~/.matplotlib
rm -r *

Linux系统 删除~/.cache/matplotlib中的缓存文件

cd ~/.cache/matplotlib
rm -r *

源码

import matplotlib.pyplot as plt
import random

# 1、准备数据 x y
x = range(60)
y = [random.uniform(15,18) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y)

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5))

# 4、显示图像
plt.show()

结果

总结

问题解决

经验分享 程序员 微信小程序 职场和发展