文实例讲述了Python实现matplotlib显示中文的方法。分享给大家供大家参考,具体如下:
【注意】
可能与本文主题无关,不过我还是想指出来:使用matplotlib库时,下面两种导入方式是等价的(我指的是等效,当然这个说法可以商榷:)
1
|
import
matplotlib.pyplot as plt
|
1
|
import
pylab as plt
|
【效果图】
![](https://i-blog.csdnimg.cn/blog_migrate/6d20dea83fa90194a68e459ee2f8abbf.png)
【方式一】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()
|
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/060bd216d5875c0a897cf9b7cfd7c362.jpeg)
【附录】
一些中文字体的英文名
宋体 | 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 |