当在MacBook的pycharm上使用matplotlib绘制图表时,中文很可能会无法正常显示,如下图中图表文字部分的方块:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2, 6, 50)
y1 = x + 3 # 曲线 y1
plt.figure() # 定义一个图像窗口
plt.plot(x, y1) # 绘制曲线 y1
plt.title('直线图')
plt.show()
解决办法:
查看matplotlib支持的字体集
from matplotlib import font_manager
ttf_lists = font_manager.fontManager.ttflist
for font in ttf_lists:
print(font)
<Font 'Songti' (Songti.ttc) normal normal 400 normal>
<Font 'STIXSizeFourSym' (STIXSizFourSymBol.ttf) normal normal bold normal>
<Font 'STIXSizeThreeSym' (STIXSizThreeSymBol.ttf) normal normal bold normal>
<Font 'STIXNonUnicode' (STIXNonUniIta.ttf) italic normal 400 normal>
<Font 'STIXGeneral' (STIXGeneralBol.ttf) normal normal bold normal>
从中选择一种中文字体,以宋体为例:
plt.rcParams['font.sans-serif']=['Songti']
plt.rcParams['axes.unicode_minus']=False
这样就可以显示成功了,如下图
注意:如果查看的字体集宋体为如下所示:
<Font 'Songti SC' (Songti.ttc) normal normal 400 normal>
<Font 'STIXSizeFourSym' (STIXSizFourSymBol.ttf) normal normal bold normal>
<Font 'STIXSizeThreeSym' (STIXSizThreeSymBol.ttf) normal normal bold normal>
<Font 'STIXNonUnicode' (STIXNonUniIta.ttf) italic normal 400 normal>
<Font 'STIXGeneral' (STIXGeneralBol.ttf) normal normal bold normal>
那么上面语句应该为
# plt.rcParams['font.sans-serif']=['Songti']
plt.rcParams['font.sans-serif']=['Songti SC']
plt.rcParams['axes.unicode_minus']=False
如果查看的matplotlit字体集中没有宋体,然后你想使用宋体,则需要修改matplotlit配置文件,具体操作如下
-
查看Mac中文字体集
在Focus Search (聚焦搜索)中, 在电脑屏幕右上角点击搜索图标,搜索font, 进入字体册, 选择宋体(没有宋体,那你就需要下载该字体了)
复制路径 option + command + c
/Library/Fonts/Songti.ttc
- 修改Matplotlib配置
进入matplotlib的配置路径
cd /User/xxxx/.matplotlib
修改配置中的字体文件fontList.json,在ttflist列表中, 添加"Songti"的中文字体集。首先,进入fontList.json
vi fontList.json
找到ttflist
/ttflist
添加宋体字体集
{
"fname": "/Library/Fonts/Songti.ttc",
"name": "Songti",
"style": "normal",
"variant": "normal",
"weight": 400,
"stretch": "normal",
"size": "scalable",
"_class": "FontEntry"
}
查看matplotlib支持的字体集,这时候就显示有"Songti"了 (当然上述的"Songti SC"也可以在这里改为"Songti" ,如果你不嫌麻烦,也可以不改,按照上面👆的语句也可以使用),设置就完成了!
- 使用字体集
plt.rcParams['font.sans-serif']=['Songti']
plt.rcParams['axes.unicode_minus']=False
参考:
1、matplotlib显示中文 for mac
2、Python-MacOS上matplotlib显示中文字体