How to correct PlantUML Line Path
Solution 1
To make a connection less important in the layout, use [norank]
, e.g., a -[norank]-> b
Solution 2
There are some tricks that you can try, listed below. The layouting itself is performed by GraphViz (dot layouting iirc), and GraphViz simply does this sometimes. Graph layouting is a NP-complete problem, so algorithms usually take harsh shortcuts.
Typical workarounds that I've seen or used include:
- adding hidden lines
a -[hidden]- b
- extending the length of a line
a --- b
(more dashes, longer line) - specifying preferred direction of lines (
a -left- b
) - swapping association ends (
a -- b
→b -- a
) - changing the order of definitions (the order does matter... sometimes)
- adding empty nodes with background/border colors set to Transparent
So if you really want to have a nice layout, you'll need to put some elbow grease in, but keep in mind that the layout will be still brittle -- if you add/remove items, you might need to redo it again.
Solution 3
Try the options suggested by @Peter Uhnak along with linetype :
skinparam linetype polyline
skinparam linetype ortho
Give better options for lines. Using ortho - (Here)
you will get -
Solution 4
If anyone wants to know a more specific, put probably much more useless answer, here is what I did in the end.
order -down- publisher
publisher -[hidden]up- order
so for some reason adding the duplicated command both ways solves it.
Solution 5
All these good answers are compiled and referenced in the semi-official Hitchhiker’s Guide to PlantUML. See the Layout section.
Not sure how it was 3 years ago, but it's probably now a better starting point for PlantUML tweaks than SO.
Related videos on Youtube
aSamWow
Updated on July 09, 2022Comments
-
aSamWow almost 2 years
I created this diagram using the following code. But as you can see, the lines going from (Cancel Order) and (Place Order) to (Publisher) decide to take a terribly rounded path to get their, instead of going straight to the right and then down to publisher. I tried using manual direction commands like "-down" but none of them seemed to help. Does anybody know how to fix this?
And here is my code. I appreciate any help. Thank you.
@startUML EBook Use Case Diagram left to right direction Actor Customer as customer Actor EBook as ebook Actor Publisher as publisher rectangle "Book Catalogue" { together { Actor "Book Database" as bookLog (Retrieve Information) as getBook customer -- getBook getBook -- ebook getBook -- bookLog (Update Catalogue) as updateCatalogue ebook -- updateCatalogue updateCatalogue -- bookLog } together { (Place Order) as order customer -- order order -- ebook order--publisher (Cancel Order) as cancelOrder customer -- cancelOrder cancelOrder -- ebook cancelOrder--publisher } } (Ship To EBook) as shipEBook shipEBook -- publisher (Ship To Customer) as shipCustomer customer -- shipCustomer ebook -- shipEBook shipCustomer -- ebook (Return to EBook) as returnCustomer (Returnto Publisher) as returnPublisher customer -- returnCustomer returnCustomer -- ebook ebook -- returnPublisher returnPublisher -- publisher @endUML
-
FunkyBaby almost 6 yearshow do you make the picture so clear? did you first export to svg and then convert to png?
-
aSamWow almost 6 yearshey, I just did export to image (png probably?) with the vscode plant uml extension. I don't use vscode or plantuml anymore, so I can't be of much help, sorry.
-
-
aSamWow about 6 yearsGood idea, it does fix the problem, but Ortho lines mess up labels in plant UML so I try to avoid them for more complex diagrams.
-
6pi almost 5 yearsI would like to point out the use of
together
done by @aSamWow. I didn't know this command before but I just successfully use it like following :together group1 { class a class b } together group2 { class c class d } group1 -[hidden]- group2
-
kinjelom about 4 years"label positioning wrong in linetype ortho" - please vote for it: github.com/plantuml/plantuml/issues/149
-
fkleedorfer almost 4 yearsMy goal with this answer is to document an undocumented PlantUML feature with minimal cognitive load in a place where related features are nicely listed (and accepted as the answer). Users of PlantUML will appreciate
norank
in the context of this question. -
aSamWow almost 4 yearsI appreciate this. I never knew about the norank option! @fkleedorfer
-
Fred almost 4 yearsI didn't know about the line length feature! Thank you very much!
-
Uwe Geuder almost 3 years> for some reason: I guess the reason is that every edge adds weight. In Graphviz one can specify weight of edges, but I have not found a way to do it in PlantUML.