R中使用DiagrammeR调用Graphviz时如何正确使用box3d形状
问题根因
DiagrammeR包内置绑定的Graphviz渲染引擎版本过低,box3d是Graphviz 2.40及以上版本才新增支持的形状,包内置的旧版引擎没有该形状的定义,调用时会自动回退渲染为默认矩形;而circle属于Graphviz早期版本就存在的基础形状,所以可以正常识别渲染。
可行解决方案
- 方案1:升级渲染引擎版本
该方案渲染出的box3d效果和Graphviz官方效果完全一致- 先在本地系统安装2.40以上版本的Graphviz,安装过程中勾选将Graphviz添加到系统PATH的选项
- 重启R环境后,运行
Sys.which("dot")确认能返回系统中dot命令的完整路径,此时DiagrammeR会优先调用系统安装的高版本Graphviz渲染,shape = box3d的写法就可以正常生效
- 方案2:自定义模拟3D盒子效果
该方案不需要升级任何依赖,全版本DiagrammeR都可兼容
不需要依赖原生box3d形状,通过HTML标签自定义节点样式模拟立体盒子效果,可直接运行的示例代码如下:
DiagrammeR::grViz("digraph { node [shape=plaintext] box [label=< <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="12" BGCOLOR="white"> <TR> <TD WIDTH="18" HEIGHT="18" BORDER="0" BGCOLOR="#888888"></TD> <TD WIDTH="40" BORDER="0"></TD> </TR> <TR> <TD BORDER="0"></TD> <TD>B</TD> </TR> </TABLE> >] }")
排错提示:如果运行方案1后仍然无法识别box3d形状,可手动将Graphviz安装目录下的bin文件夹路径添加到系统环境变量,重启R/RStudio后再重试即可。
内容的提问来源于stack exchange,提问作者bird
相关产品推荐
相关产品推荐

