解决Graphviz中文乱码问题

18 篇文章 0 订阅

问题描述:

使用Graphviz绘制中文依存句法分析树的时候发现输出的中文结点乱码,不能正常显示中文,如下图所示:

分析:

Graphviz 绘图时所使用的语言叫作"dot"。使用dot 语言,第一步就是决定要画哪种图。图分两种:有向图与无向图。

有向图以digraph声明图片,节点间的关系写为"->"; 无向图以graph 声明图片,节点间的关系可以写为"--"。

画图时需要对图片做一些特别的处理,例如加粗、把图变色等。我们要控制这些东西,就需要用到属性。

属性有四种:

  1. 用在节点上(Node, N) ; 
  2. 用在线段上(Edge, E);   
  3. 用在根图片上(Graph, G);   
  4. 用在子图片上(Cluster subgraph, C)

对于节点(node) 的属性,有以下几种指定法:

  • 节点名[节点属性名=值];
  • 节点名[节点属性名=值,节点属性名=值];
  • node [节点属性名=值,节点属性名=值];

属性指定的语句必须要被中括号括起。当一次指定多值时,需用英文逗点隔开。第三行中的node 是个关键字,用来代称「图片范围内」所有「还没创建」的节点,或者您也可将它理解为:在当前大括号的范围内,所有尚未创建节点的属性预设值,会被这个语句给变更。

对于线段(edge)的属性指定,与上述节点属性指定方式很类似:

  •  节点名->节点名[线段属性名=值];
  •  节点名--节点名[线段属性名=值,线段属性名=值];
  • edge [线段属性名=值,线段属性名=值]; 其中edge 是关键字。

可见以下两个例子pic2.dot和pic1.dot。其中pic1.dot描述了一个无向图,即用不带箭头的直线表示节点之间的联系的图;pic2.dot描述了一个有向图,有向图不仅能表示节点之间的联系,而且能用箭头表示节点之间流动的方向。它的线段(edge)的属性有style和color,属性值分别是filled和blue。

digraph pic2 { 
  a -> b
  a -> b
  b -> a [style=filled color=blue]

                          

graph pic1 { 
  a -- b
  a -- b
  b -- a [color=blue]

                   
 

解决方法:

graphviz默认设置下是不支持中文,如果在dot文件中直接写中文,会显示成乱码,要解决这个问题要做两件事,

1、把源文件保存为UTF-8的格式
2、设置fontname,也就是在node属性里添加fontname一项。例如下图标记处fontname="FangSong"表示结点中字体用仿宋体。

验证执行结果:

附:Windows系统中文字体的英文名

  • 新細明體:PMingLiU
  • 細明體:MingLiU
  • 標楷體:DFKai-SB
  • 黑体:SimHei
  • 宋体:SimSun
  • 新宋体:NSimSun
  • 仿宋:FangSong
  • 楷体:KaiTi
  • 仿宋_GB2312:FangSong_GB2312
  • 楷体_GB2312:KaiTi_GB2312
  • 微軟正黑體:Microsoft JhengHei
  • 微软雅黑体:Microsoft YaHei

 

 

 

 

参考文献:

1. http://blog.chinaunix.net/uid-24118190-id-3852456.html

2. https://www.cnblogs.com/luhouxiang/p/6193222.html

3. https://blog.csdn.net/xiajian2010/article/details/23748557

  • 19
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Graphviz Pdf乱码可能是因为字体设置不正确所导致的。在保存为pdf格式时,可以指定字体来解决乱码问题。 例如,可以使用pydotplus库的write_pdf函数,并在函数参数中指定字体。另外,还可以将dot文件转换为UTF-8格式以支持中文显示。 这里提供一个示例代码来解决Graphviz Pdf乱码问题: import pydotplus from sklearn import tree # 构建决策树模型 clf = tree.DecisionTreeClassifier() clf.fit(X, y) # 生成dot文件 dot_data = tree.export_graphviz(clf, out_file=None, feature_names=feature_names, class_names=class_names, filled=True, rounded=True) with open('dot_file.dot', 'w', encoding='utf-8') as f: f.write(dot_data) # 将dot文件转换为pdf并指定字体 graph = pydotplus.graph_from_dot_file('dot_file.dot') graph.write_pdf('output.pdf', fontname='Arial Unicode MS') 通过以上代码,可以将决策树保存为pdf格式,并指定字体为Arial Unicode MS,从而解决Graphviz Pdf乱码问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [graphviz画决策树图中文乱码问题终极解决方案](https://blog.csdn.net/weixin_39725650/article/details/111005122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值