Graphviz双列图需求:固定第一列节点位置,其余列自由布局
解决Graphviz固定列节点位置被连接关系干扰的问题
要让第一列节点的固定位置不受跨列连接的影响,核心是切断连接边对布局约束的作用,以下是两种可行方案:
方案一:给跨列边添加constraint=false属性
给连接固定列和自由列的边加上constraint=false后,Graphviz会忽略这条边对节点位置的约束计算,只保留边的可视化效果,不会因为边的存在调整固定节点的位置。修改后的代码如下:
rankdir=LR; node [shape=box]; subgraph cluster_0 { label = "Spalte 1"; a [pos="0,2!"]; b [pos="0,1!"]; c [pos="0,0!"]; } subgraph cluster_1 { label = "Spalte 2"; d; e; f; } a-> e [constraint=false]; a -> f [constraint=false]; }
方案二:给固定位置节点添加fixed=true属性
给第一列的每个节点加上fixed=true,明确告知Graphviz这些节点的位置是绝对固定的,任何连接都不能改变它们的坐标。同时可以给第一列的cluster设置固定位置,避免cluster整体偏移:
rankdir=LR; node [shape=box]; subgraph cluster_0 { label = "Spalte 1"; pos="0,1!"; // 对应节点y坐标的中心值,固定cluster位置 a [pos="0,2!", fixed=true]; b [pos="0,1!", fixed=true]; c [pos="0,0!", fixed=true]; } subgraph cluster_1 { label = "Spalte 2"; d; e; f; } a-> e; a -> f; }
方案一更简洁,适合仅需忽略边约束的场景;方案二更彻底,适合需要绝对锁定节点位置的场景。
内容的提问来源于stack exchange,提问作者ozz
相关产品推荐
相关产品推荐

