Python實現matplotlib顯示中文的方法詳解
阿新 • • 發佈:2021-08-01
文例項講述了Python實現matplotlib顯示中文的方法。分享給大家供大家參考,具體如下:
【注意】
可能與本文主題無關,不過我還是想指出來:使用matplotlib庫時,下面兩種匯入方式是等價的(我指的是等效,當然這個說法可以商榷:)
1 |
import matplotlib.pyplot as plt
|
1 |
import pylab as plt
|
【效果圖】
【方式一】FontProperties
1 2 3 4 5 6 7 8 |
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties # 步驟一
# ...
font = FontProperties(fname = r "c:\windows\fonts\simsun.ttc" , size = 14 ) # 步驟二
plt.xlabel( "x軸" , fontproperties = font) # 步驟三
plt.ylabel( "y軸" , fontproperties = font)
plt.title( "標題" , fontproperties = font)
plt.show()
|
總的來說,很醜陋。
【方式二】 fontproperties
1 2 3 4 5 6 |
import matplotlib.pyplot as plt
# ...
plt.xlabel( "x軸" )
plt.ylabel( "y軸" , fontproperties = "SimSun" ) # 步驟一 (宋體)
plt.title( "標題" , fontproperties = "SimHei" ) # (黑體)
plt.show()
|
靈活,另一個優點:不汙染全域性字型設定
【方式三】rcParams
1 2 3 4 5 6 7 8 |
import matplotlib.pyplot as plt
plt.rcParams[ 'font.sans-serif' ] = [ 'SimHei' ] # 步驟一(替換sans-serif字型)
plt.rcParams[ 'axes.unicode_minus' ] = False # 步驟二(解決座標軸負數的負號顯示問題)
#...
plt.xlabel( "x軸" )
plt.ylabel( "y軸" )
plt.title( "標題" )
plt.show()
|
簡潔的用法。缺點:汙染全域性字型設定。(所以需要第二步驟)
【方式四】rc
1 2 3 4 5 6 7 8 9 10 11 |
import matplotlib.pyplot as plt
font = { 'family' : 'SimHei' ,
'weight' : 'bold' ,
'size' : '16' }
plt.rc( 'font' , * * font) # 步驟一(設定字型的更多屬性)
plt.rc( 'axes' , unicode_minus = False ) # 步驟二(解決座標軸負數的負號顯示問題)
#...
plt.xlabel( "x軸" )
plt.ylabel( "y軸" )
plt.title( "標題" )
plt.show()
|
靈活的用法。缺點:影響全域性字型(所以需要第二步驟)
【總結】
方式二用時才設定,且不會汙染全域性字型設定,更靈活
方式三、方式四不需要對字型路徑硬編碼,而且一次設定,多次使用,更方便。
【測試程式碼】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import numpy as np
import matplotlib.pyplot as plt
font = { 'family' : 'DFKai-SB' ,
'weight' : 'bold' ,
'size' : '16' }
plt.rc( 'font' , * * font) # pass in the font dict as kwargs
plt.rc( 'axes' ,unicode_minus = False )
x = np.linspace( 0 , 10 , 1000 )
y = np.sin(x)
z = np.cos(x * * 2 )
plt.figure(figsize = ( 8 , 4 ))
plt.plot(x,y,label = "$sin(x)$" ,color = "red" ,linewidth = 2 )
plt.plot(x,z, "b--" ,label = "$cos(x^2)$" )
plt.xlabel( "x軸" )
plt.ylabel( "y軸" )
plt.title( "標題" )
plt.ylim( - 1.2 , 1.2 )
plt.legend()
plt.show()
|
執行結果:
【附錄】
一些中文字型的英文名
宋體 | SimSun |
黑體 | SimHei |
微軟雅黑 | Microsoft YaHei |
微軟正黑體 | Microsoft JhengHei |
新宋體 | NSimSun |
新細明體 | PMingLiU |
細明體 | MingLiU |
標楷體 | DFKai-SB |
仿宋 | FangSong |
楷體 | KaiTi |
隸書 | LiSu |
幼圓 | YouYuan |
華文細黑 | STXihei |
華文楷體 | STKaiti |
華文宋體 | STSong |
華文中宋 | STZhongsong |
華文仿宋 | STFangsong |
方正舒體 | FZShuTi |
方正姚體 | FZYaoti |
華文彩雲 | STCaiyun |
華文琥珀 | STHupo |
華文隸書 | STLiti |
華文行楷 | STXingkai |
華文新魏 | STXinwei |