python graphviz 中文乱码
2025-01-29
问题:在调用graphviz库进行决策树绘图的时候,即使我们设置了fontname='SimHei', encoding='utf-8',我们同样会发现出现了中文乱码的情况
from graphviz import Digraph
dot = Digraph('决策树', encoding='utf-8')
dot.attr(fontname='SimHei', encoding='utf-8') # 改为系统中的中文字体
dot.node('1', '纹理')
dot.node('2', '根蒂')
dot.node('3', '触感')
dot.node('4', '否')
dot.node('5', '否')
dot.node('6', '是')
dot.node('7', '是')
dot.node('8', '否')
dot.node('9', '色泽')
dot.node('10', '是')
dot.node('11', '敲声')
dot.node('12', '否')
dot.node('13', '是')
dot.edge('1', '2', label='清晰')
dot.edge('1', '3', label='稍糊')
dot.edge('1', '4', label='模糊')
dot.edge('2', '5', label='硬挺')
dot.edge('2', '9', label='稍蜷')
dot.edge('2', '6', label='蜷缩')
dot.edge('3', '7', label='软粘')
dot.edge('3', '8', label='硬滑')
dot.edge('9', '10', label='青绿')
dot.edge('9', '11', label='乌黑')
dot.edge('11', '12', label='软粘')
dot.edge('11', '13', label='硬滑')
dot.view()
解决办法:我们可以将节点字体与边字体再设置一遍,顺便将原来产生的图片删掉,再输出一遍,我们的问题就得到了解决
from graphviz import Digraph
dot = Digraph('决策树', encoding='utf-8')
dot.attr(fontname='SimHei', encoding='utf-8') # 改为系统中的中文字体
dot.node_attr.update(fontname='SimHei') # 设置节点字体
dot.edge_attr.update(fontname='SimHei') # 设置边字体
dot.node('1', '纹理')
dot.node('2', '根蒂')
dot.node('3', '触感')
dot.node('4', '否')
dot.node('5', '否')
dot.node('6', '是')
dot.node('7', '是')
dot.node('8', '否')
dot.node('9', '色泽')
dot.node('10', '是')
dot.node('11', '敲声')
dot.node('12', '否')
dot.node('13', '是')
dot.edge('1', '2', label='清晰')
dot.edge('1', '3', label='稍糊')
dot.edge('1', '4', label='模糊')
dot.edge('2', '5', label='硬挺')
dot.edge('2', '9', label='稍蜷')
dot.edge('2', '6', label='蜷缩')
dot.edge('3', '7', label='软粘')
dot.edge('3', '8', label='硬滑')
dot.edge('9', '10', label='青绿')
dot.edge('9', '11', label='乌黑')
dot.edge('11', '12', label='软粘')
dot.edge('11', '13', label='硬滑')
dot.view()