Python中matplotlib绘图plotNode()函数无法显示汉字问题解决

如上图所示是使用机器学习实战附带源码,在python上的得到的plotNode()函数输出,显然,'决策节点'和'叶节点'这两行汉字未能显示

产生中文乱码的原因:字体的默认设置中无中文字体,需要手动添加中文字体的名称

添加代码如下:

from pylab import *  
mpl.rcParams['font.sans-serif'] = ['SimHei']  

注意:官方自带源码中还需要对createPlot.ax1.annotate()函数进行修改
修改后源码如下:
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 30 15:57:37 2018

@author: demons
"""
import matplotlib.pyplot as plt
from pylab import *  
mpl.rcParams['font.sans-serif'] = ['SimHei']  

#定义文本框和箭头格式
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.ax1.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()
#    axprops = dict(xticks=[], yticks=[])
#    createPlot.ax1 = plt.subplot(111, frameon=False, **axprops)    #no ticks
    createPlot.ax1 = plt.subplot(111, frameon=False) #ticks for demo puropses  
#    plotTree.totalW = float(getNumLeafs(inTree))
#    plotTree.totalD = float(getTreeDepth(inTree))
#    plotTree.xOff = -0.5/plotTree.totalW; plotTree.yOff = 1.0;
#    plotTree(inTree, (0.5,1.0), '')
    plotNode(U'决策节点',(0.5,0.1),(0.1,0.5),decisionNode)
    plotNode(U'叶节点',(0.8,0.1),(0.3,0.8),leafNode)
    plt.show()

最终效果图:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值