Matplotlib中文亂碼的3種解決方案

Matplotlib是一個Python 2D繪圖庫,它可以在各種平臺上以各種硬拷貝格式和交互式環(huán)境生成出具有出版品質(zhì)的圖形。 Matplotlib可用于Python腳本,Python和IPython shell,Jupyter筆記本,Web應(yīng)用程序服務(wù)器和四個圖形用戶界面工具包。

然而最近在使用matplotlib默認(rèn)情況會出現(xiàn)亂碼問題,原則上matplotlib是支持中文的,只是在配置信息里沒有中文字體的相關(guān)信息。文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

解決方法如下:文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

解決方案一:修改配置文件文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

matplotlib 從配置文件 matplotlibrc 中讀取配置,字體相關(guān)內(nèi)容也在其中。查詢當(dāng)前matplotlibrc 所在目錄,可以用 get_configdir()函數(shù):文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

1
2
import matplotlib
matplotlib.get_configdir()

通常存放位置:lib\site-packages\matplotlib\mpl-data\matplotlibrc文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

涉及到字體部分的設(shè)置內(nèi)容為:文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#font.family : sans-serif
#font.style : normal
#font.variant : normal
#font.weight : normal
#font.stretch : normal
## note that font.size controls default text sizes. To configure
## special text sizes tick labels, axes, labels, title, etc, see the rc
## settings for axes and ticks. Special text sizes can be defined
## relative to font.size, using the following values: xx-small, x-small,
## small, medium, large, x-large, xx-large, larger, or smaller
#font.size : 10.0
#font.serif : DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
#font.sans-serif : DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
#font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive
#font.fantasy : Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, xkcd, fantasy
#font.monospace : DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace

matplotlib 默認(rèn)使用的 font.family 是 sans-serif,即無襯線字體,可以看到在font.sans-serif中設(shè)置的全部為西文字體,這里的設(shè)置和css樣式文件中設(shè)置差不多,只需要添加系統(tǒng)存在的字體名稱即可(需要注意的是,matplotlib:文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

只支持ttf格式的字體),設(shè)置時需要將注釋符號#去除。文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

解決方案二:重載配置文件文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

1
2
3
4
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負(fù)號'-'顯示為方塊的問題,或者轉(zhuǎn)換負(fù)號為字符串

解決方案三:自定義字體
文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/42034.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
import pylab as pl
import matplotlib.font_manager as fm
myfont = fm.FontProperties(fname=r'D:\Fonts\simkai.ttf') # 設(shè)置字體
t = np.arange(0.0,2.0 * np.pi,0.01) # 自變量取值范圍
s = np.sin(t) # 計算正弦函數(shù)值
z = np.cos(t) # 計算余弦函數(shù)值
pl.plot(t,s,label='正弦')
pl.plot(t,z,label='余弦')
pl.xlabel('x-變量',fontproperties=myfont,fontsize=24) #設(shè)置標(biāo)簽
pl.ylabel('y-正弦余弦函數(shù)值',fontproperties=myfont,fontsize=24)
pl.title('sin-cos函數(shù)圖像',fontproperties=myfont,fontsize=32) #圖像標(biāo)題
pl.legend(prop=myfont)
pl.show()

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,

繼續(xù)閱讀
我的微信
微信掃一掃
weinxin
我的微信
惠生活福利社
微信掃一掃
weinxin
我的公眾號
 

發(fā)表評論

匿名網(wǎng)友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖動滑塊以完成驗證