我正在尝试打印有向图,并且我不断更改各种节点属性,例如颜色和形状。有没有办法使用一次定义并用于多个节点的变量?理想情况下,我喜欢这样的事情:
digraph g {
building_color = "red"
land_color = "green"
farm [ fillcolor=land_color]
barn [ fillcolor=building_color]
house [ fillcolor=building_color]
}
所以我可以改变建筑颜色一次,而不必去每个节点。这可能吗?
答案 0 :(得分:18)
您可以定义默认值以避免重复:
digraph g{
node[fillcolor=red];
barn;
house;
...
node[fillcolor=green];
farm;
...
edge[color=red];
barn -> house;
edge[color=green];
barn --> farm;
house --> farm;
}
不支持Real 变量。
更复杂的解决方法是使用gvpr
- 图形模式扫描和处理语言。
gvpr
读取和输出图表,允许添加和修改图形,节点和属性。
例如,您可以在comment
属性中存储自定义信息,并让您的脚本根据此属性的内容进行操作。
答案 1 :(得分:16)
最简单的解决方案是使用m4
- generic text-to-text preprocessor。
SampleGraph.dot.m4
:
digraph g {
define(`building_style',`style=filled, fillcolor = "red"')
define(`land_style',`style=filled, fillcolor = "green"')
farm [label="Farm", land_style]
barn [building_style]
house [label="House", building_style]
}
运行m4 SampleGraph.dot.m4 > SampleGraph.dot
结果SampleGraph.dot
:
digraph g {
farm [label="Farm", style=filled, fillcolor = "green"]
barn [style=filled, fillcolor = "red"]
house [label="House", style=filled, fillcolor = "red"]
}