我正在尝试打印有向图,并且我不断更改各种节点属性,例如颜色和形状.有没有办法使用一次定义并用于多个节点的变量?理想情况下,我喜欢这样的事情:
digraph g {
building_color = "red"
land_color = "green"
farm [ fillcolor=land_color]
barn [ fillcolor=building_color]
house [ fillcolor=building_color]
}
Run Code Online (Sandbox Code Playgroud)
所以我可以改变建筑颜色一次,而不必去每个节点.这可能吗?
mar*_*pet 20
您可以定义默认值以避免重复:
digraph g{
node[fillcolor=red];
barn;
house;
...
node[fillcolor=green];
farm;
...
edge[color=red];
barn -> house;
edge[color=green];
barn --> farm;
house --> farm;
}
Run Code Online (Sandbox Code Playgroud)
不支持实变量.
更复杂的解决方法是使用gvpr- 图形模式扫描和处理语言.
gvpr 读取和输出图形,允许添加和修改图形,节点和属性.
例如,您可以在comment属性中存储自定义信息,并让您的脚本根据此属性的内容执行操作.
Dee*_*ter 17
最简单的解决方案是使用m4- 通用的文本到文本预处理器.
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]
}
Run Code Online (Sandbox Code Playgroud)
跑 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"]
}
Run Code Online (Sandbox Code Playgroud)