Python中Graphviz图表在GitHub无法正常显示拉丁及中文字符
解决Graphviz生成图表在GitHub显示中文乱码的问题
问题根源
你添加的# -*- coding: utf-8 -*-是Python文件的编码声明,和Graphviz渲染图表时的字体编码无关。乱码的核心原因是:
- 你使用的
verdana字体不支持中文字符 - GitHub渲染Graphviz生成的SVG时,不会自动加载本地中文字体,导致中文用默认无中文字体显示为乱码
具体解决方案
方案1:更换为GitHub支持的中文字体
直接把代码中的字体替换为GitHub渲染环境自带支持的通用中文字体,比如思源黑体(Noto Sans SC)或微软雅黑(Microsoft YaHei)。修改后的代码如下:
from graphviz import Digraph h = Digraph("Shu") # 替换为支持中文的字体 h.attr(rankdir="LR", fontname="Noto Sans SC") with h.subgraph(name='cluster_wu') as c: c.attr(label='5 Shu antigos 五輸穴', style='rounded,filled', color='blanchedalmond', fontname="Noto Sans SC") c.node_attr.update(style='filled', color='white', fontname="Noto Sans SC") c.node('a1','Poço\n井穴', color='white') c.node('a2',"Manancial\n滎穴", color='lightgray') c.node('a3',"Riacho\n輸穴", color='darkgray') c.node('a4',"Rio\n經穴", color='gray40') c.node('a5',"Mar\n合穴", color='gray20', fontcolor='white') c.edges([('a1', 'a2'), ('a2', 'a3'), ('a3', 'a4'), ('a4', 'a5')]) h
方案2:生成PNG格式图表(更稳妥)
SVG是矢量图,依赖外部字体环境;PNG是位图,字体直接嵌入到图片中,GitHub显示不会有字体兼容问题。修改代码指定生成PNG格式:
from graphviz import Digraph from IPython.display import Image h = Digraph("Shu") h.attr(rankdir="LR", fontname="Noto Sans SC") with h.subgraph(name='cluster_wu') as c: c.attr(label='5 Shu antigos 五輸穴', style='rounded,filled', color='blanchedalmond') c.node_attr.update(style='filled', color='white') c.node('a1','Poço\n井穴', color='white') c.node('a2',"Manancial\n滎穴", color='lightgray') c.node('a3',"Riacho\n輸穴", color='darkgray') c.node('a4',"Rio\n經穴", color='gray40') c.node('a5',"Mar\n合穴", color='gray20', fontcolor='white') c.edges([('a1', 'a2'), ('a2', 'a3'), ('a3', 'a4'), ('a4', 'a5')]) # 生成PNG文件,cleanup=True自动删除中间dot文件 h.render('shu_chart', format='png', cleanup=True) # 在Notebook中显示PNG,GitHub打开时直接加载图片 Image('shu_chart.png')
补充说明
- 若本地没有
Noto Sans SC字体,可先安装,或换成Windows系统自带的Microsoft YaHei - 方案2生成的PNG文件需和Notebook一同上传到GitHub,确保文件路径正确
内容的提问来源于stack exchange,提问作者Rodrigo Sze
相关产品推荐
相关产品推荐

