【发布时间】:2020-05-05 20:29:45
【问题描述】:
我在 graphviz 中有一个简单的 fdp 图,其中有一堆节点(矩形和菱形)具有固定的位置,其中一些节点有子节点(椭圆形),我想自动围绕它们排列.
我希望其中的所有边都是直的,没有曲线或折线或任何东西(即由splines=false 给出),但我也希望这些子节点不与具有固定位置的节点之间的边重叠。使用固定位置是因为我需要固定节点之间的边缘完全垂直或水平。这可能是我可以通过迭代不同的start 值并希望下一个不会有重叠来实现的,但到目前为止这有点令人厌烦。
digraph G {
###GRAPH
layout=fdp
overlap=false
dpi=150
splines=false
inputscale=0.4
# fdp specific:
K=0.50
maxiter=2000
start=1251
###OBJECTS
node[shape=rectangle width=1.0 height=0.4 fixedsize=true]
vendor[label="Поставщик" pos="3,1!"
]
item[label="Товар" pos="0,2!"
]
post[label="Поставка" pos="2,2!"
]
check[label="Чек" pos="1,1!"
]
prod[label="Продажа" pos="0,0!"
]
###SUBOBJECTS
node[shape=oval width=1.5 height=0.5]
edge[arrowhead=none]
{
vendork[label=<<u>ID поставщика</u>>] "Название\nпоставщика" "Контакт\nдля связи"
}->vendor
{
itemk[label=<<u>ID товара</u>>]
Название Тип Подтип Характеристики "Розничная цена"
}->item
{
postk[label=<<u>ID записи</u>>] post1[label="ID товара"]
post2[label="Кол-во"] post3[label="Цена поставки"]
post4[label="Дата"] post5[label="Квитанция"]
}->post
{
prodk[label=<<u>ID продажи</u>>] prod1[label="ID товара"]
prod2[label="Кол-во"] prod3[label="Цена\nпродажи"]
prod4[label="Чек"]
}->prod
{
checkk[label=<<u>ID чека</u>>] Дата Кассир "Сумма" "НДС" "Итого" "Вид оплаты"
}->check
###CONNECTIONS
node[shape=diamond]
edge[arrowhead=open]
vendorpost[label="Поставляет" pos="3,2!"
]
vendorpost->vendor
vendorpost->post[arrowhead=openopen]
postitem[label="Поставлен" pos="1,2!"
]
postitem->item
postitem->post[arrowhead=openopen]
itemprod[label="Продан" pos="0,1!"
]
itemprod->item
itemprod->prod[arrowhead=openopen]
prodcheck[label="Включает" pos="1,0!"
]
prodcheck->prod[arrowhead=openopen]
prodcheck->check
}
(原谅西里尔人)
我正在编译时没有附加参数(即dot -Tpng graph.gv > graph.png)。到目前为止,我明白了。
我也尝试过使用neato,但在大多数情况下,它会给出一个非常奇怪的结果,它似乎完全忽略了固定节点位置,并在任何它想要的地方绘制子节点:
我浏览了the documentation 中的属性列表,到目前为止,除了splines 之外似乎没有一个解决节点/边缘重叠的问题(除非我错过了一些东西)。我应该怎么做才能达到我想要的结果?
【问题讨论】:
标签: graphviz