How to generate a legend with colors in PlantUML?

2019-06-16 19:10发布

问题:

I want to color classes in my class diagram, based on a certain criteria, and then display a legend, that would look roughly like:

If I could add an HTML table within PlantUML's legend and endlegend, I could achieve this by changing the cell backgrounds. However, adding the HTML <table> doesn't work. I also tried using PlantUML's salt to insert a table, but I couldn't find any way to color the cells of the table.

Is there any way to achieve this?

回答1:

This is not perfect, but you can use a creole table. (see http://plantuml.sourceforge.net/creole.html )

@startuml class foo

 legend |= |= Type | |<back:#FF0000>   </back>| Type A class |
 |<back:#00FF00>   </back>| Type B class | |<back:blue>   </back>| Type
 C class | endlegend

@enduml

There are some drawing artifacts, but is it what you are expecting ?

From the plantuml forum. Where they allowed to copy this answer here.

Yes, please copy/paste our answer to StackOverflow : it would indeed by helpful

http://plantuml.sourceforge.net/qa/?qa=3596/how-to-generate-a-legend-with-colors-in-plantuml



回答2:

I've tried nfec's solution and it was not working for me, but it started me off on a solution that did work. Here is what I got.

legend right
    |Color| Type |
    |<#FF0000>| Type A class|
    |<#00FF00>| Type B class|
    |<#0000FF>| Type C class|
endlegend


回答3:

There doesn't appear to be a direct way of including a color-coded legend in a PlantUML diagram, but I figured out a workaround which is close enough.

  • Declare classes TypeA, TypeB, TypeC inside a package LEGEND.
  • Hide the circle, methods and members for each class.
  • Attach "hidden" connectors between the classes.


package LEGEND <<Rect>> { ' Draw the LEGEND "package" as a rectangular box.
class TypeA as "Type A Class" #LightRed
hide  TypeA circle
hide  TypeA methods
hide  TypeA members

class TypeB as "Type B Class" #LightBlue
hide  TypeB circle
hide  TypeB methods
hide  TypeB members

class TypeC as "Type C Class" #LightGreen
hide  TypeC circle
hide  TypeC methods
hide  TypeC members

' Workaround to prevent PlantUML from positioning the legend blocks randomly.
TypeA -[hidden]- TypeB
TypeB -[hidden]- TypeC
}

Alternatively, the "hidden" connectors could be replaced with -r-, like so:

TypeA -r- TypeB
TypeB -r- TypeC

These produces the following diagrams. Neither one is perfect, but better than drawing the legend separately in image editor. :-) I do hope PlantUML offers direct support for this in a future release.