Język grafów kropkowych - jak automatycznie tworzyć dwukierunkowe krawędzie?


83

Oto bardzo uproszczony przykład mojego wykresu kropkowego:

strict digraph graphName {
A->B
B->A
}

To tworzy tekst alternatywny

Zamiast tego chcę pokazać pojedynczą krawędź między A i B, ale z podwójną strzałką. Wiem, jak uzyskać podwójną strzałkę jako opcję globalną:

strict digraph graphName {
  edge [dir="both"]
A->B
B->A
}

Ale to wygląda bardzo brzydko i nie wszystkie moje krawędzie powinny być dwugłowe.

tekst alternatywny

Jeśli wykonam więcej przetwarzania wykresu i sam wykryję podwójne odniesienie i zastąpię dwie krawędzie jedną krawędzią, wygląda to dobrze. Ale wolałbym nie musieć robić tego dodatkowego kroku

strict digraph graphName {
A->B [dir="both"]
}

tekst alternatywny

Jakieś lepsze rozwiązania?

Odpowiedzi:


67

A co z „koncentratem = prawda” ?:

strict digraph graphName {
concentrate=true
A->B
B->A
}

z koncentratem = prawda

Z dokumentacji :

Jeśli tak, użyj koncentratorów brzegowych. Powoduje to scalenie wielu obszarów w jedną krawędź i powoduje, że częściowo równoległe krawędzie współdzielą część ich ścieżek. Ta ostatnia funkcja nie jest jeszcze dostępna poza kropką.


Działa z etykietą dla mnie, a ja używam starszej wersji.
Aaron Hall

1
Jeśli to pomoże ... to nie zadziałało dla mnie, ponieważ zetknęło krawędzie, a na końcu umieściło tylko jedną strzałę. Potem spróbowałem „ścisłego digrafu” ... i wtedy działa idealnie.
philw

To głupie, ale właśnie tego chciał OP, tak wielki!
Dan Rosenstark

@philw U mnie też nie działa, dostaję krawędzie tylko z pojedynczym grotem. Używam pygraphviz i próbowałem pgv.AGraph(directed=True, strict=True), ale też nie działa, znowu mam dwie krawędzie ... Jakieś sugestie?
Tropilio

101

Powinieneś po prostu użyć:

A -> B [dir=both]

4
To zaoszczędziło mi kilku zbędnych wierszy i używam go wraz z najlepszą odpowiedzią tam, gdzie to konieczne.
Aaron Hall

2
Nie potrzebujesz cytatów wokół „obu”
Yetti99,

@NoahSussman To nie może być zaakceptowana odpowiedź, ponieważ tak naprawdę nie odpowiada na pytanie;)
Dan Rosenstark
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.