文实例讲述了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 |