如何解决Python的matplotlib模块绘图时无法显示中文的问题

如何解决Python的matplotlib模块绘图时无法显示中文的问题

刚刚接触Python的matplotlib包的时候就遇到了中文的问题,这个世界对中国人实在是太不友好了!在百度上搜索了N多下,终于解决了这个问题,同时解决了matplotlib绘图默认像素不高的问题。

首先绘制一幅单利和复利的对比图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from matplotlib.font_manager import *
from pylab import *
pv, n, r = (1000, 10, 0.08)
t = np.linspace(0, n, n)
y1 = np.ones(len(t))*pv
y2 = pv*(1+r*t)
y3 = pv*(1+r)**t
title(u"单利vs复利")
xlabel(u"期数")
ylabel(u"值")
xlim(0, 11)
ylim(800, 2200)
plot(t, y1, 'b-')
plot(t, y2, 'g--')
plot(t, y3, 'r-')
show()

渣渣画质且中文无法显示啊!
最后终于找到了解决办法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## 单利与复利
from matplotlib.font_manager import *
from pylab import *
# 定义自定义字体,文件名从查看系统中文字体中来
myfont = FontProperties(fname='/Library/Fonts/Songti.ttc')
# 解决负号'-'显示为方块的问题
matplotlib.rcParams['axes.unicode_minus'] = False
rcParams['savefig.dpi'] = 600 # 图片像素
rcParams['figure.dpi'] = 600 # 分辨率
pv, n, r = (1000, 10, 0.08)
t = np.linspace(0, n, n)
y1 = np.ones(len(t))*pv # 一条水平参考线
y2 = pv*(1+r*t)
y3 = pv*(1+r)**t
title(u"单利vs复利", fontproperties = myfont)
xlabel(u"期数", fontproperties = myfont)
ylabel(u"值", fontproperties = myfont)
xlim(0, 11)
ylim(800, 2200)
plot(t, y1, 'b-')
plot(t, y2, 'g--')
plot(t, y3, 'r-')
savefig('20180623a4.png')
show()

有几点需要注意的是,图片的分辨率和像素最好不要超过1000,如果设置的数值过大,轻则运行时间过久,重则软件崩溃。
/Library/Fonts/Songti.ttc这个是电脑上的字体册里面的字体,昨天我发现我电脑上的Stata的控制台有个神奇的功能,就是我把文件直接粘贴到控制台上会直接显示该文件的路径和文件名。。。。如下图:


这里就既解决了中文问题又解决了像素差的问题!

# Python

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×