如何在Graphviz neato环境下将文本置于节点旁并左对齐?
解决Graphviz neato中彩色圆节点旁文本左对齐的问题
问题场景
我正在用Graphviz的neato渲染大型图形,基础配置如下:
digraph G { graph [scale="1,0.7"] }
需要实现彩色圆形节点+右侧左对齐文本的效果,尝试用两个节点(一个圆、一个文本)实现,但文本始终居中,手动调整位置依赖文本长度,操作繁琐。试过\l换行符、labeljust=l属性、用<font>标签加align属性,都无法实现左对齐。
可行解决方案
方案1:利用HTML标签实现文本左对齐
给文本节点使用Graphviz支持的HTML格式标签,通过<div>设置左对齐,同时设置节点shape=none消除默认节点框,让文本左边缘成为节点的左边界,方便定位:
digraph G { graph [scale="1,0.7"] n1 [pos="1,-8!" style=filled shape=circle width=0.25 color=green1] # 文本节点用HTML div左对齐,shape=none去掉节点背景 n2 [pos="1.15,-8!" shape=none label=<<div align="left">the node label</div>>] }
这里n2的x坐标设为1.15,是圆节点x坐标1加上圆的半径0.125(width=0.25的一半),再加0.025的间距,文本左边缘刚好紧贴圆的右侧。
方案2:结合labeljust=l与shape=none
给文本节点设置shape=none后,labeljust=l属性会生效,此时文本左边缘与节点的位置点对齐,只需把文本节点的位置点放在圆的右侧边缘即可:
digraph G { graph [scale="1,0.7"] n1 [pos="1,-8!" style=filled shape=circle width=0.25 color=green1] n2 [pos="1.125,-8!" shape=none label="the node label" labeljust=l] }
1.125是圆节点x坐标1加上半径0.125,文本左边缘正好和圆的右边缘对齐,无需手动计算文本长度。
方案3:单个节点组合实现(无需拆分)
如果不想用两个节点,可以直接给节点设置shape=none,用HTML表格把圆和文本组合在一起,自动实现对齐:
digraph G { graph [scale="1,0.7"] combined [pos="1,-8!" shape=none label=<<table border="0" cellborder="0" cellspacing="2"> <tr> <td><circle width="25" height="25" fillcolor="green1" style="filled"/></td> <td align="left">the node label</td> </tr> </table>>] }
这种方式用HTML表格将圆形和文本放在同一行,自动实现左对齐,无需手动调整坐标,更适合批量节点的场景。
内容的提问来源于stack exchange,提问作者F-H
相关产品推荐
相关产品推荐

