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