Python实现matplotlib显示中文的方法详解

文实例讲述了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
  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值