環(huán)境:macOS Monterey 12.2.1、Python3.10.2、Matplotlib 3.5.1
目錄
方法一:修改配置文件,全局字體修改
例外情況
方法二:rcParams設置,全局字體修改
方法三:fontproperties設置,非全局字體修改
方法四:FontProperties設置,非全局字體修改
方法一:修改配置文件,全局字體修改
搜索網絡的解決方式,通過copy字體和修改matplotlibrc的三處文本解決問題,大部分情況下代碼能正常顯示中文。
1. 終端輸入命令:python,進入Python界面輸入代碼,獲取matplotlib包所在的配置文件的路徑。比如我的為:?/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc
import?matplotlib
matplotlib.matplotlib_fname()?????#輸出matplotlib包所在的配置文件的路徑

2. 根據(jù)第一步獲取路徑打開文件夾。比如我的路徑為:/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf
3. 網絡下載中文字體放進去,比如SimHei.ttf(黑體)、SimSun.ttf(宋體),YaHei.ttf(微軟雅黑)。要ttf格式的,并安裝字體。
4. 使用文本編輯或sublime Text軟件打開matplotlibrc文件。(位置:/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc)
(1)找到font.family: sans-serif,去掉最前面的#。
(2)找到font.sans-serif:,去掉前面的#,并將剛才的SimHei、SimSun、Microsoft YaHei添加進去。

(3)找到axes.unicode_minus: True,去掉最前面的#,并將True改為False。

4. 保存、關閉matplotlibrc文件。
5. 打開/Users/用戶名/.matplotlib文件夾,把里面的文件刪掉。我的里面只有一個fontlist-v330.json。
6. 以后的大部分代碼不用任何設置可以正常顯示中文了。
如以下代碼繪制的圖形中文標題正常顯示。
import?matplotlib.pyplot?as?plt
input_values?=?[1,?2,?3,?4,?5,?6]
squares?=?[1,?4,?9,?16,?25,?36]
fig,?ax?=?plt.subplots()
ax.plot(input_values,?squares,?linewidth=3)
ax.set_title("平方值",?fontsize=20)
ax.set_xlabel("值",?fontsize=14)
ax.set_ylabel("平方-值",?fontsize=14)
ax.tick_params(axis='both',?labelsize=14)
plt.show()

例外情況
雖然方法一通過修改配置文件修改了全局的字體設置,但以下場景繪制的圖像還是不能正常顯示中文:代碼中圖形使用plt.style.use('seaborn')設置時。
可以用方法二來解決。
import?matplotlib.pyplot?as?plt
...
plt.style.use('seaborn')????#?上述代碼加入此句代碼
fig,?ax?=?plt.subplots()
...????

方法二:rcParams設置,全局字體修改
1. 在plt.style.use('seaborn')?后面加上字體設置代碼,即可顯示中文。字體設置代碼必須在seaborn代碼后面才能生效。
2. 字體設置只針對該py文件plt.style.use('seaborn')?后面的代碼有效,如果后面的圖像又使用類似plt.style.use('seaborn')?語句,還需要再次設置字體代碼。
import?matplotlib.pyplot?as?plt?#?最前面如果已經import,此句可以不要???????
...
plt.style.use('seaborn')
#?字體設置代碼
plt.rcParams['font.sans-serif']?=?'Microsoft?Yahei'?#?顯示漢字:SimHei黑體,simsum宋體,Microsoft?YaHei雅黑。根據(jù)系統(tǒng)安裝的字體,有的能用有的不能用,我的是這三個可以。
plt.rcParams['axes.unicode_minus']?=?False?#?正常顯示負號

方法三:fontproperties設置,非全局字體修改
1. 在plt.title()、plt.xlabel(),plt.ylabel()參數(shù)設置中,使用fontproperties指定字體。
2. 可以指定不同的字體,但字體必須在ttf里,并已安裝。
import?matplotlib.pyplot?as?plt
input_values?=?[1,?2,?3,?4,?5,?6]
squares?=?[1,?4,?9,?16,?25,?36]
plt.style.use('seaborn')
plt.plot(input_values,?squares,?linewidth=3)
plt.figure("Hello測試中文!",facecolor='lightgray')
plt.title("測試中文",fontsize=20,fontproperties="Microsoft?Yahei")
plt.xlabel("X值",?fontsize=14,fontproperties="SimHei")
plt.ylabel("Y值",?fontsize=14,fontproperties="SimHei")
plt.show()

方法四:FontProperties設置,非全局字體修改
此方法需要導入FontProperties模塊、設置myfont變量,并指定fontproperties參數(shù)三個步驟,雖繁瑣,但可以指定ttc格式的字體文件。
1.?導入FontProperties模塊:from matplotlib.font_manager import FontProperties
2. 設置變量myfont = FontProperties(fname=r"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf/PingFang.ttc", size=14)?
3.?plt.title()、plt.xlabel(),plt.ylabel()參數(shù)設置中,使用fontproperties指定字體為變量myfont。?文章來源:http://www.zghlxwxcb.cn/news/detail-419293.html
import?matplotlib.pyplot?as?plt
from?matplotlib.font_manager?import?FontProperties # 步驟一
input_values?=?[1,?2,?3,?4,?5,?6]
squares?=?[1,?4,?9,?16,?25,?36]
# 步驟二
myfont?=?FontProperties(fname=r"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf/PingFang.ttc",?size=14)
plt.style.use('seaborn')
fig,?ax?=?plt.subplots()
ax.plot(input_values,?squares,?linewidth=3)
ax.set_title("平方值",?fontproperties=myfont) # 步驟三
ax.set_xlabel("值",?fontproperties=myfont) # 步驟三
ax.set_ylabel("平方-值",?fontproperties=myfont) # 步驟三
ax.tick_params(axis='both',?labelsize=14)
plt.show()

還有一種通過rc設置的全局字體修改方法,和方法二有些類似。但試了一下不太好用,就不寫了。文章來源地址http://www.zghlxwxcb.cn/news/detail-419293.html
到了這里,關于Python學習過程問題記錄(二):Matplotlib中文顯示問題的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!