graphviz - graphviz - 防止节点和边在没有样条的情况下重叠
问题描述
我在 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,但在大多数情况下,它会给出一个非常奇怪的结果,它似乎完全忽略了固定节点位置,并在任何它想要的地方绘制子节点:
我浏览了文档中的属性列表,到目前为止似乎没有一个解决节点/边缘重叠的问题splines
(除非我错过了一些东西)。我应该怎么做才能达到我想要的结果?
解决方案
推荐阅读
- sql - 雪花:“SQL 编译错误:...不是有效的按表达式分组”
- google-app-engine - 批量排队 Google Cloud 任务
- matlab - Matlab图形多个光标条
- javascript - 在 NW.js 应用程序中使用时,Windows 上的 drivelist 错误(动态链接库 (DLL) 初始化例程失败)
- python - 向 Dash-Plotly Python 仪表板添加水平线
- javascript - 需要帮助重构代码以解决 eslint 无循环警告
- html - 正则表达式数字模式和 maxlength 在 IE 上不起作用
- python - MySQL - 如果表名包含表列表的记录,则选择表名
- java - Java秒表类
- matlab - 如何最好地实现与 Matlab 的 intersect 函数等效的 Fortran