Graphivz中文显示问题

   Graphviz (相关详细教程请点击进入官网)是基于dot语言的绘图工具,可以画有向图,无向图,关系图,目录图,流程图等。在使用过程中,发现 Graphivz 对 中文的支持还是不够,容易出现各种各样的问题。

  • 中文乱码问题

   这种问题,很多人都遇到过,因为 Graphivz 默认是不支持中文的,所以如果直接写中文的画,会显示成乱码,一般这种情况可以修改文件的编码 格式为 UTF-8 , 然后将 fontname 设置为系统中存在的中文字体格式就可以解决。具体可以参考这篇博文 Graphviz使用简介(中文乱码的问题) ,我就不在赘叙了。

  • 中文无法显示

   这是我使用过程中确确实实遇到的问题。比如,我们使用如下 dot 代码来绘制一个 hash 表图。

可能这个问题跟系统环境有关,首先,我先贴一下我的环境

  • 编辑器: GNU Emacs 25.2.1 (x8664-pc-linux-gnu, GTK+ Version 3.20.9) of 2017-02-25
  • 系统: Linux version 4.4.39-gentoo (root@johans) (gcc version 4.9.4 (Gentoo 4.9.4 p1.0, pie-0.6.4) ) #1 SMP Wed Mar 8 09:21:39 CST 2017
digraph idp_modules{

  rankdir = TB;
  fontname = "Microsoft YaHei";
  fontsize = 12;

  node [ fontname = "Microsoft YaHei", fontsize = 12, shape = "record" ];
  edge [ fontname = "Microsoft YaHei", fontsize = 12 ];

  subgraph cluster_sl{
      label="IDP支持层";
      bgcolor="mintcream";
      node [shape="Mrecord", color="skyblue", style="filled"];
      network_mgr [label="网络管理器"];
      log_mgr [label="日志管理器"];
      module_mgr [label="模块管理器"];
      conf_mgr [label="配置管理器"];
      db_mgr [label="数据库管理器"];
      };

      subgraph cluster_md{
      label="可插拔模块集";
      bgcolor="lightcyan";
      node [color="chartreuse2", style="filled"];
      mod_dev [label="开发支持模块"];
      mod_dm [label="数据建模模块"];
      mod_dp [label="部署发布模块"];
      };

  mod_dp -> mod_dev [label="依赖..."];
  mod_dp -> mod_dm [label="依赖..."];
  mod_dp -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
  mod_dev -> mod_dm [label="依赖..."];
  mod_dev -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
  mod_dm -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
}

zh_error

   导致这一情况的有两种原因:

  • 设置的字体在你系统中不存在,在这里,我的系统中不存在 Microsoft YaHei 这种字体
  • Label 中包含中文的时候, 英文引号和中文之间需要有空格分分隔。

   但是很奇怪,这种情况只发生在拥有内嵌子图时 subgraph(子图) 中的 label 上, 而不会发生在 digraph 中的 label 上。

   解决方法:

  • 将中文字体设置为你系统存在的中文字体
  • Label 中的中文和引号之间用空格隔开。
digraph idp_modules{

  rankdir = TB;
  fontname = "FZFangSong-Z02";
  fontsize = 12;

  node [ fontname = "FZFangSong-Z02", fontsize = 12, shape = "record" ];
  edge [ fontname = "FZFangSong-Z02", fontsize = 12 ];

      subgraph cluster_sl{
      label="IDP支持层";
      bgcolor="mintcream";
      node [shape="Mrecord", color="skyblue", style="filled"];
      network_mgr [label=" 网络管理器 "];
      log_mgr [label=" 日志管理器 "];
      module_mgr [label=" 模块管理器 "];
      conf_mgr [label=" 配置管理器 "];
      db_mgr [label=" 数据库管理器 "];
      };

      subgraph cluster_md{
      label="可插拔模块集";
      bgcolor="lightcyan";
      node [color="chartreuse2", style="filled"];
      mod_dev [label=" 开发支持模块 "];
      mod_dm [label=" 数据建模模块 "];
      mod_dp [label=" 部署发布模块 "];
      };

  mod_dp -> mod_dev [label="依赖..."];
  mod_dp -> mod_dm [label="依赖..."];
  mod_dp -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
  mod_dev -> mod_dm [label="依赖..."];
  mod_dev -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
  mod_dm -> module_mgr [label="安装...", color="yellowgreen", arrowhead="none"];
}

zh_ok

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值