当前位置: 首页>后端>正文

macOS系统中使用Vscode中matplotlib中文字体乱码的解决办法

问题描述

使用Vscode中Jupyter插件matplotlib画图时,因为缺少字体,出现warning,图像上label上的中文显示时空白小方块
代码如下:

import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [1,4,9,16,25]
#调用绘制的plot方法
plt.plot(x, y, linewidth=5)
plt.xlabel('x')
plt.ylabel('y=x^2')
#添加标题
plt.title('多个点绘制折线图') #会出现乱码

#显示绘制的图
plt.show()

报错

/Users/XXX/opt/anaconda3/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 22810 missing from current font.
  font.set_text(s, 0.0, flags=flags)

生成结果:


macOS系统中使用Vscode中matplotlib中文字体乱码的解决办法,第1张
output.png

解决方法

方法一

使用MAC自带的字体

#不支持中文的解决办法
plt.rcParams['font.sans-serif']=['Arial Unicode MS'] #用来正常显示中文标签

方法二

使用SimHei.ttf字体

1、查看matplotlib字体路径

import matplotlib
print (matplotlib.matplotlib_fname())
# 输出:/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

matplotlib字体路径为:/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/

2、下载SimHei.ttf字体

3、将下载好的SimHei.ttf字体移动到第一步查询到的字体目录./fonts/ttf/下

注意名字必须是SimHei.ttf

mv /Users/xxx/Downloads/simhei_itmop.com/simhei.ttf /Users/xxx/opt/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf

4、清理matplotlib缓冲目录

获取缓存目录

import matplotlib
print(matplotlib.get_cachedir())
# 输出:/Users/xxx/.matplotlib

清理缓存目录

rm -rf /Users/xxx/.matplotlib

5、重新加载新的字体库,并彻底退出重启Vscode(重要)

# python3
Python 3.8.16 | packaged by conda-forge | (default, Feb  1 2023, 16:05:36) 
[Clang 14.0.6 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from matplotlib.font_manager import _rebuild
>>> _rebuild() 
>>> exit()

6、测试

添加使用指定字体

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

完整代码:

import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [1,4,9,16,25]
#调用绘制的plot方法
plt.plot(x, y, linewidth=5)
plt.xlabel('x')
plt.ylabel('y=x^2')
#不支持中文的解决办法
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
#添加标题
plt.title('多个点绘制折线图') #会出现乱码

#显示绘制的图
plt.show()

中文显示恢复正常


macOS系统中使用Vscode中matplotlib中文字体乱码的解决办法,第2张
output.png

方法二进阶

上接方法二中将下载好的字体移到matplotlib字体路径下

修改原始文件

打开第一步找到的字体路径:/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc进行修改

#去掉前面的#
font.family:  sans-serif
#去掉前面的#,手动加SimHei
font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
#去掉前面的#,把True改为False
axes.unicode_minus: False  # use Unicode for the minus symbol rather than hyphen.  See
                           # https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes

然后,重复方法二中清理matplotlib缓冲目录,重新加载新的字体库,并彻底退出重启Vscode
之后不需要plt.rcParams['font.sans-serif'] = ['SimHei']就可以自动显示中文
测试:

import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [1,4,9,16,25]
#调用绘制的plot方法
plt.plot(x, y, linewidth=5)
plt.xlabel('x')
plt.ylabel('y=x^2')
#添加标题
plt.title('多个点绘制折线图') 
#显示绘制的图
plt.show()
macOS系统中使用Vscode中matplotlib中文字体乱码的解决办法,第3张
output.png

解决!!!


https://www.xamrdz.com/backend/3u61940977.html

相关文章: