Matplotlib是Python的一个很好的绘图包,但是其本身并不支持中文(貌似其默认配置中没有中文字体),所以如果绘图中出现了中文,就会出现乱码。
matplotlib绘制图像有中文标注时会有乱码问题。
实例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import matplotlib import matplotlib.pyplot as plt #定义文本框和箭头格式 decisionNode = dict (boxstyle = "sawtooth" ,fc = "0.8" ) leafNode = dict (boxstyle = "round4" ,fc = "0.8" ) arrow_args = dict (arrowstyle = "<-" ) #绘制带箭头的注解 def plotNode(nodeTxt,centerPt,parentPt,nodeType): createPlot.axl.annotate(nodeTxt,xy = parentPt,xycoords = 'axes fraction' ,xytext = centerPt,textcoords = 'axes fraction' ,va = "center" ,ha = "center" ,bbox = nodeType,arrowprops = arrow_args) def createPlot(): fig = plt.figure( 1 ,facecolor = 'white' ) fig.clf() createPlot.axl = plt.subplot( 111 ,frameon = False ) plotNode(U '决策点' ,( 0.5 , 0.1 ),( 0.1 , 0.5 ),decisionNode) plotNode(U '叶节点' ,( 0.8 , 0.1 ),( 0.3 , 0.8 ),leafNode) plt.show() |
解决办法:代码中引入字体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import matplotlib.pyplot as plt import matplotlib #定义自定义字体,文件名是系统中文字体 myfont = matplotlib.font_manager.FontProperties(fname = 'C:/Windows/Fonts/simkai.ttf' ) #解决负号'-'显示为方块的问题 matplotlib.rcParams[ 'axes.unicode_minus' ] = False decisionNode = dict (boxstyle = "sawtooth" ,fc = "0.8" ) leafNode = dict (boxstyle = "round4" ,fc = "0.8" ) arrow_args = dict (arrowstyle = "<-" ) def plotNode(nodeTxt,centerPt,parentPt,nodeType): createPlot.axl.annotate(nodeTxt,xy = parentPt,xycoords = 'axes fraction' ,xytext = centerPt,textcoords = 'axes fraction' ,va = "center" ,ha = "center" ,bbox = nodeType,arrowprops = arrow_args,fontproperties = myfont) def createPlot(): fig = plt.figure( 1 ,facecolor = 'white' ) fig.clf() createPlot.axl = plt.subplot( 111 ,frameon = False ) plotNode(U '决策点' ,( 0.5 , 0.1 ),( 0.1 , 0.5 ),decisionNode) plotNode(U '叶节点' ,( 0.8 , 0.1 ),( 0.3 , 0.8 ),leafNode) plt.show() |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.jianshu.com/p/f8c9d04e537e