Python畫圖時如何調(diào)用本地字體
matplotlib中的字體文件被封裝在font_manager這個子模塊中,fontManager.ttflist這個列表涵蓋了所有Matplotlib支持的字體。
>>> import matplotlib.pyplot as plt >>> from matplotlib.font_manager import fontManager >>> print(fontManager.ttflist[0]) #此為字體文件 <Font 'cmmi10' (cmmi10.ttf) normal normal 400 normal>
Font類中主要有7個基本屬性:
‘fname' | ‘name' | ‘size' | ‘stretch' | ‘style' | ‘variant' | ‘weight' |
---|---|---|---|---|---|---|
存儲路徑 | 字體名 | 尺寸 | 拉伸方式 | 斜粗風(fēng)格 | 變體 | 粗細(xì) |
若想全局設(shè)置字體,可通過更改plt.rcParams來實現(xiàn),例如設(shè)為等線字體
plt.rcParams['font.sans-serif'] = 'DengXian' plt.text(0,0,'測試',fontsize=20) plt.show()
效果為
一般來說電腦中內(nèi)置的字體文件都是數(shù)百記,很難逐一展示,所以接下來希望將前100個字體展示在一張圖中。
然而rcParams對于并非坐標(biāo)軸的屬性,而是當(dāng)前作圖窗格的屬性,若想在局部啟用其他字體,可通過plt.text中的fontproperties參數(shù)來實現(xiàn)
import numpy as np from matplotlib.font_manager import FontProperties x,y = np.indices([10,10]).reshape(2,100)/10 for i in range(100): font = fontManager.ttflist[i] plt.text(x[i],y[i],f"測試:{font.name}", fontsize=10, ha='left', va='bottom', fontproperties = FontProperties(fname=font.fname)) plt.show()
得到測試字體如圖所示
在作圖時選擇其中支持中文的字體,就不會出現(xiàn)中文亂碼問題了。
補充
python實現(xiàn)繪圖時候的中文顯示,顯示微軟雅黑字體
1.安裝庫pip3 install matplotlib
2.向Matplotlib添加中文字體Microsoft YaHei(微軟雅黑)
Matplotlib不能默認(rèn)使用中文字體顯示字符的原因只是因為其未包含中文字體文件,所以導(dǎo)入中文字體文件到Matplotlib中即可。
網(wǎng)上下載微軟雅黑的ttf文件。Microsoft YaHei.ttf
D:\python\Lib\site-packages\matplotlib\mpl-data(新電腦在C盤python39,裝python的地方)
打開這個目錄可以看到這個路徑下的mpl-data/fonts/ttf/,這個就是Matplotlib引入字體的路徑,我們只需要把微軟雅黑字體的ttf文件拷貝到其中即可。
3.修改Matplotlib的默認(rèn)字體配置
mpl-data/matplotlibrc這個文件,這個就是Matplotlib的配置文件。
在這個文件中搜索font.family,其中font.family:? sans-serif將#刪除即把此行注釋打開。則Matplotlib現(xiàn)在的默認(rèn)字體族是:
font.family : sans-serif
再在這個文件中搜索font.sans-serif,將#刪除即把此行注釋打開,然后在這個配置的最前面加上Microsoft YaHei,
font.sans-serif : Microsoft YaHei, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
則Matplotlib現(xiàn)在的默認(rèn)sans-serif字體族會最先使用Microsoft YaHei去展示字體,而這個Microsoft YaHei就可以展示中文字體了。
(axes.unicode_minus? : True這一行注釋去掉,將true改成false,,,此處用來正常顯示負(fù)號)(可不做)
4.清除字體緩存(可不做)
為了更好地看到效果,最好可以清楚之前Matplotlib生成的緩存文件,打開~/.matplotlib路徑,其中可以看到fontList.json和tex.cache,前者其實就是字體列表的緩存文件,可以刪除:rm -rf fontList.json
5.當(dāng)然,懶辦法顯示中文字體
每次用時需要設(shè)置
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標(biāo)簽(動態(tài)設(shè)置) plt.rcParams['axes.unicode_minus']=False #用來正常顯示負(fù)號
以上就是Python畫圖時如何調(diào)用本地字體的詳細(xì)內(nèi)容,更多關(guān)于Python調(diào)用本地字體的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python3反轉(zhuǎn)字符串的3種方法(小結(jié))
這篇文章主要介紹了python3反轉(zhuǎn)字符串的3種方法(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11解決jupyter notebook打不開無反應(yīng) 瀏覽器未啟動的問題
這篇文章主要介紹了解決jupyter notebook打不開無反應(yīng) 瀏覽器未啟動的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python技法之如何用re模塊實現(xiàn)簡易tokenizer
當(dāng)我們在Python中開始新的東西時,我通常首先看一些模塊或庫來使用,下面這篇文章主要給大家介紹了關(guān)于Python技法之如何用re模塊實現(xiàn)簡易tokenizer的相關(guān)資料,需要的朋友可以參考下2022-05-05Python中多進程處理的Process和Pool的用法詳解
在Python編程中,多進程是一種強大的并行處理技術(shù),Python提供了兩種主要的多進程處理方式:Process和Pool,本文將詳細(xì)介紹這兩種方式的使用,希望對大家有所幫助2024-02-02Python3編程實現(xiàn)獲取阿里云ECS實例及監(jiān)控的方法
這篇文章主要介紹了Python3編程實現(xiàn)獲取阿里云ECS實例及監(jiān)控的方法,涉及Python URL登陸及請求處理相關(guān)操作技巧,需要的朋友可以參考下2017-08-08