如何使用Graphviz/Dot渲染带上下文本的水平拆分圆形节点?
实现水平拆分的圆形节点(含上下文本)
Graphviz本身没有原生的“拆分圆形”形状,但可以通过HTML节点内容+圆形形状的组合来实现你要的效果,完美替代record式圆形节点。
方法1:HTML表格配合circle形状
直接给节点设置shape=circle,用HTML的<table>结构实现上下文本拆分,中间加分隔线,代码示例:
digraph G { node [shape=circle, style=filled, fillcolor=white] split_circle [label=< <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" WIDTH="100"> <TR><TD>上半部分文本</TD></TR> <TR><TD BORDERTOP="1">下半部分文本</TD></TR> </TABLE> >] }
- 用
TABLE的两个单元格承载上下文本,通过BORDERTOP="1"给下方单元格添加顶部边框,模拟水平拆分线 shape=circle会强制节点保持圆形,HTML内容会自适应填充到圆形内部- 可通过调整
WIDTH控制圆形大小,或fontsize调整文本尺寸
方法2:自定义分隔线样式(更灵活)
如果需要调整分隔线的颜色、粗细,可改用独立单元格作为分隔线:
digraph G { node [shape=circle, style=filled, fillcolor=#f0f8ff] custom_split [label=< <TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" WIDTH="120"> <TR><TD ALIGN="CENTER" HEIGHT="50">第一行内容</TD></TR> <TR><TD BGCOLOR="black" HEIGHT="1"></TD></TR> <!-- 黑色细分隔线 --> <TR><TD ALIGN="CENTER" HEIGHT="50">第二行内容</TD></TR> </TABLE> >] }
这种方式能精准控制分隔线的样式,比单元格边框更灵活。
为什么你之前的尝试没成功?
Mrecord本质是圆角矩形,其布局逻辑基于矩形,即使调大圆角参数也无法完全变成圆形Mcircle是用于多端口的圆形节点,设计目的不是拆分文本内容,不符合需求
内容的提问来源于stack exchange,提问作者Jonas Mechtheim
相关产品推荐
相关产品推荐

