GraphViz에서 범례 / 키 만들기
GraphViz 다이어그램에 범례 또는 키를 포함하고 싶습니다. 그래도 사용할 코드를 파악하는 데 문제가 있습니다. 나는 또한 그것을 구석에 놓고 싶지만 내가 확실히 아는 유일한 좌표는 왼쪽 하단 pos="10,10!"
입니다.
아무도 내가 이것을 작동시킬 수있는 방법을 알고 있습니까?
digraph {
rankdir=LR
node [shape=plaintext]
subgraph cluster_01 {
label = "Legend";
key [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0">
<tr><td align="right" port="i1">item 1</td></tr>
<tr><td align="right" port="i2">item 2</td></tr>
<tr><td align="right" port="i3">item 3</td></tr>
<tr><td align="right" port="i4">item 4</td></tr>
</table>>]
key2 [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0">
<tr><td port="i1"> </td></tr>
<tr><td port="i2"> </td></tr>
<tr><td port="i3"> </td></tr>
<tr><td port="i4"> </td></tr>
</table>>]
key:i1:e -> key2:i1:w [style=dashed]
key:i2:e -> key2:i2:w [color=gray]
key:i3:e -> key2:i3:w [color=peachpuff3]
key:i4:e -> key2:i4:w [color=turquoise4, style=dotted]
}
...
나는 dot
.
저는 graphviz를 이런 방식으로 사용해서는 안된다고 확신하지만 HTML 레이블 을 사용 하여 원하는 것을 얻을 수 있습니다.
digraph {
Foo -> Bar -> Test;
Foo -> Baz -> Test;
{ rank = sink;
Legend [shape=none, margin=0, label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD COLSPAN="2"><B>Legend</B></TD>
</TR>
<TR>
<TD>Foo</TD>
<TD><FONT COLOR="red">Foo</FONT></TD>
</TR>
<TR>
<TD>Bar</TD>
<TD BGCOLOR="RED"></TD>
</TR>
<TR>
<TD>Baz</TD>
<TD BGCOLOR="BLUE"></TD>
</TR>
<TR>
<TD>Test</TD>
<TD><IMG src="so.png" SCALE="False" /></TD>
</TR>
<TR>
<TD>Test</TD>
<TD CELLPADDING="4">
<TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0">
<TR>
<TD BGCOLOR="Yellow"></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
>];
}
}
다음과 같이 보입니다.
Legend 의 위치 는 다른 노드와 마찬가지로 수행해야합니다 (순위 = sink를 사용하여 맨 아래로 이동)- margin
위치를 미세 조정하기 위해 해당 속성을 사용할 수 있습니다 .
편집 :
레이블을 사용하지 않으면 방향이 될 수 있습니다 ranksep
. 완전히 제거해야하는지 잘 모르겠습니다 .
digraph {
mindist=0;
ranksep=0;
nodesep=0;
node[shape=box,margin="0,0",width=1, height=0.5];
edge [style=invis];
Legend[width=2];
Legend -> Foo;
Legend -> FooValue;
Foo -> Bar;
FooValue -> BarValue
Bar -> Baz;
BarValue -> BazValue;
edge [constraint=false];
Foo -> FooValue;
Bar -> BarValue
Baz -> BazValue;
}
를 야기하는:
그래프를 사용하면 몇 가지 문제가 있습니다 [splines=ortho]
. 선이 역순입니다.
도트 소스 :
digraph {
rankdir=LR
node [shape=plaintext]
graph [splines=ortho]
subgraph cluster_01 {
label = "Legend";
key [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0">
<tr><td align="right" port="i1">item 1</td></tr>
<tr><td align="right" port="i2">item 2</td></tr>
<tr><td align="right" port="i3">item 3</td></tr>
<tr><td align="right" port="i4">item 4</td></tr>
<tr><td align="right" port="i5">item 5</td></tr>
</table>>]
key2 [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0">
<tr><td port="i1" bgcolor='greenyellow'> </td></tr>
<tr><td port="i2"> </td></tr>
<tr><td port="i3"> </td></tr>
<tr><td port="i4"> </td></tr>
<tr><td port="i5"> </td></tr>
</table>>]
key:i1:e -> key2:i1:w [color=red]
key:i2:e -> key2:i2:w [color=gray]
key:i3:e -> key2:i3:w [color=peachpuff3]
key:i4:e -> key2:i4:w [color=turquoise4, style=dotted]
key:i5:e -> key2:i5:w [color=red, style=dotted]
}
}
나는 다음과 함께 약간의 운이 좋았습니다. 나는 그것이 얼마나 넓은 지 좋아하지 않았지만 그렇지 않으면 작동했습니다.
subgraph cluster1 {
label = "Legend" ;
shape=rectangle ;
color = black ;
a [style=invis];
b [style=invis] ;
c [style=invis] ;
d [style=invis] ;
c -> d [label="only ts", style=dashed, fontsize=20] ;
a -> b [label="ts and js", fontsize=20] ;
gui -> controller [style=invis] ;
view -> model [style=invis] ;
builtins -> utilities [style=invis] ;
gui [style=filled, fillcolor="#ffcccc"] ;
controller [style=filled, fillcolor="#ccccff"] ;
view [style=filled, fillcolor="#ccffcc"] ;
model [style=filled, fillcolor="#ffccff"] ;
builtins [style=filled, fillcolor="#ffffcc"] ;
utilities ;
"external libraries" [shape=rectangle] ;
}
결과는
메인 graphviz 이미지에 키를 삽입하는 여러 가지 방법을 시도한 후, 저는 단순히 범례를 별도의 자체 도트 파일에 넣고 자체적으로 렌더링하고 별도의 이미지로 렌더링하는 것이 더 합리적이라고 결정했습니다. 그런 다음 내 문서 / 페이지에 이미지를 나란히 표시합니다.
여기에는 몇 가지 장점이 있습니다.
a) .dot
소스 코드가 훨씬 더 간단합니다. b) 범례 그래프의 rankdir을 변경하여 노드를 서로 위에 표시하거나 나란히 표시하여 기본 이미지의 오른쪽 또는 아래에있는 키를 생성하는 것은 매우 쉽습니다. c) 주 그래프에서 범례로 순위 위치와 같은 항목이 누출되지 않습니다.
예를 들면 :
저도 똑같이하려고합니다. 노드 유형의 키를 만들기 위해 하위 그래프를 사용하고 있습니다.
digraph G {
rankdir=RL;
graph [fontsize=10 fontname="Verdana"];
node [style=filled height=0.55 fontname="Verdana" fontsize=10];
subgraph cluster_key {
label="Key";
progress [fillcolor="wheat" label="In progress"];
todo [label="To do"];
done [fillcolor=palegreen3 label="Done"];
not_our [fillcolor=none label="Not our\nteam"];
numbers [color=none label="Numbers\nrepresent\nperson\ndays"];
progress -> done [style=invis];
todo -> progress [style=invis];
not_our -> todo [style=invis];
numbers -> not_our [style=invis];
}
mappings [fillcolor=palegreen3];
identifiers [fillcolor=palegreen3];
hyperwarp [fillcolor=wheat];
ghost [fillcolor=none]
UI [fillcolor=none]
events [fillcolor=wheat];
flag [fillcolor=palegreen3];
groups [fillcolor=wheat];
types [fillcolor=wheat];
instances [];
resources [];
optimize [];
remove_flag [];
persist [];
approval [];
edge [style="" dir=forward fontname="Verdana" fontsize=10];
types -> flag;
groups -> events;
events -> {flag mappings identifiers};
ghost -> hyperwarp;
UI -> ghost;
resources -> identifiers;
optimize -> groups;
hyperwarp -> flag;
instances -> {ghost UI types events hyperwarp flag};
resources -> {groups flag};
remove_flag -> approval;
persist -> approval;
approval -> {types resources instances};
}
결과적으로
그러나 생각해 보면, 메인 그래프와 함께 범례를 배치해야하는 어려움, 메인 그래프의 노드 순위 위치가 범례의 노드 순위에 영향을 미치는 방식, 이것이 소개하는 소스의 복잡성을 보면 다른 접근 방식을 시도하고 싶었습니다 (다른 답변 참조, 키에 대해 별도의 그래프 사용)
참고 URL : https://stackoverflow.com/questions/3499056/making-a-legend-key-in-graphviz
'IT Share you' 카테고리의 다른 글
삽입시 Postgres 오류-오류 : "UTF8"인코딩에 대한 잘못된 바이트 시퀀스 : 0x00 (0) | 2020.12.01 |
---|---|
segfault 커널 로그 메시지를 읽는 방법 (0) | 2020.12.01 |
피클과 선반의 차이점은 무엇입니까? (0) | 2020.12.01 |
lib의 JAR 내부에서 JSP를 제공 할 수 있습니까? 아니면 해결 방법이 있습니까? (0) | 2020.12.01 |
SQL Server 2008 R2에서 원격 프로 시저 호출이 실패했습니다. (0) | 2020.12.01 |