Oto dwa podstawowe podejścia do zmieniania wykresy w MMA 8.0. Pierwszy opiera się na HighlightGraph
, w szczególności na GraphHighlightStyle -> "DehighlightHide"
. Drugie podejście wykorzystuje współrzędne VertexCooge wykresu w przyszłych wariantach tego wykresu.
Będziemy omawiać usuwanie oddzielnie od dodawania, ponieważ dotyczą one nieco innych metod.
[P.S. : Zrobiłem kilka zmian do mojej odpowiedzi w celu uczynienia go bardziej zrozumiałym]
Pierwsza część danych.
edges={1\[UndirectedEdge]8,1\[UndirectedEdge]11,1\[UndirectedEdge]18,1\[UndirectedEdge]19,1\[UndirectedEdge]21,1\[UndirectedEdge]25,1\[UndirectedEdge]26,1\[UndirectedEdge]34,1\[UndirectedEdge]37,1\[UndirectedEdge]38,4\[UndirectedEdge]11,4\[UndirectedEdge]12,4\[UndirectedEdge]26,4\[UndirectedEdge]27,4\[UndirectedEdge]47,4\[UndirectedEdge]56,4\[UndirectedEdge]57,4\[UndirectedEdge]96,4\[UndirectedEdge]117,5\[UndirectedEdge]11,5\[UndirectedEdge]18,7\[UndirectedEdge]21,7\[UndirectedEdge]25,7\[UndirectedEdge]34,7\[UndirectedEdge]55,7\[UndirectedEdge]76,8\[UndirectedEdge]11,26\[UndirectedEdge]29,26\[UndirectedEdge]49,26\[UndirectedEdge]52,26\[UndirectedEdge]111,27\[UndirectedEdge]28,27\[UndirectedEdge]51,42\[UndirectedEdge]47,49\[UndirectedEdge]97,51\[UndirectedEdge]96}
Oto początkowy wykresu:
g = Graph[edges, VertexLabels -> "Name", ImagePadding -> 10,
ImageSize -> 500]
" Usuwanie "krawędzi wykresu bez zmiany ogólnego wyglądu wykresu.
Zacznijmy od usunięcia krawędzi (4,11) znajdującej się w środku wykresu. remainingEdgesAndVertices
zawiera wszystkie wierzchołki i początkowe krawędzie, z wyjątkiem krawędzi (4,11).
remainingEdgesAndVertices =
Join[VertexList[g], Complement[EdgeList[g], {4 \[UndirectedEdge] 11}]]
Miejmy "delete" (czyli ukryć) krawędzi (4,11):
HighlightGraph[g, remainingEdgesAndVertices, VertexLabels -> "Name",
ImagePadding -> 10, GraphHighlightStyle -> "DehighlightHide",
ImageSize -> 500]
Gdybyśmy rzeczywiście usunięte krawędź (4, 11) wykres miałby radykalnie zmienił swój wygląd.
Graph[Complement[edges, {4 \[UndirectedEdge] 11}],
VertexLabels -> "Name", ImagePadding -> 10, ImageSize -> 500]
"Dodawanie" krawędź wykres bez zmiany ogólnego wyglądu wykresu.
Dodawanie krawędzi wykresu jest nieco trudniejsze. Są dwa sposoby, które przychodzą na myśl. Zastosowana tutaj metoda działa wstecz. Uwzględniasz nową krawędź jako pierwszą w ukrytej formie, a następnie odsłonisz ją później. Początkowy wykres z ukrytą krawędzią "do dodania" będzie miał układ podobny do wykresu z "nowym" brzegiem. Powód jest taki: w rzeczywistości są one tym samym wykresem: jednak pokazują one różną liczbę krawędzi.
g2 = Graph[Append[edges, 42 \[UndirectedEdge] 37],
VertexLabels -> "Name", ImagePadding -> 10, ImageSize -> 500]
HighlightGraph[g2,
Join[Complement[EdgeList[g2], {42 \[UndirectedEdge] 37}],
VertexList[g2]], VertexLabels -> "Name", ImagePadding -> 10,
GraphHighlightStyle -> "DehighlightHide"]
teraz zobaczyć na wykresie z "nowy wymiar" dodany.
To wygląda bardzo różni się od rysunku 1. Ale to wydaje się być naturalnym przedłużeniem Rys. 4.
Dodając nowe wierzchołki i krawędzie on-the-fly
Jest inna sposób dodawania krawędzi (i wierzchołków) przy zachowaniu ogólnego wyglądu. Zainspirowało go coś, co Sjoerd napisał w swojej odpowiedzi.
Niech zastrzegają punkt {0,0} dla przyszłej wierzchołka 99. Po prostu dodać ten punkt do VertexCoordinates
z G2:
vc = VertexCoordinates ->
Append[AbsoluteOptions[g2, VertexCoordinates][[2]], {0, 0}]
Teraz zobaczmy jak to wygląda. g3 to po prostu g2 z dodatkowym wierzchołkiem (999) i krawędzią (4,99).
g3 = Graph[Append[EdgeList [g2], 4 \[UndirectedEdge] 999], vc,
VertexLabels -> "Name", ImagePadding -> 10,
GraphHighlightStyle -> "DehighlightHide", ImageSize -> 500]
Procedura ta pozwala nam dodawać nowe krawędzie i wierzchołki, jak iść do przodu. Ale trzeba będzie trochę prób i błędów, aby upewnić się, że nowe wierzchołki znajdują się w odpowiedniej pozycji.
Dodawanie tylko innej krawędzi (bez nowego wierzchołka) jest znacznie łatwiejsze: wystarczy dodać nową krawędź i użyć VertexCoordinates
z poprzedniego wykresu.
Powinieneś być w stanie usunąć krawędzie z wykresu przy użyciu tego samego podejścia (używając tego samego VertexCoordinates
).
Jeśli problem jest w drugą stronę, czyli usunięcie niektórych wierzchołków i wykresów z wykresu i minimalnie zmienić układ wykresu, wtedy można wyświetlić te wierzchołki i krawędzie w przezroczystym kolorze, ale w rzeczywistości ich nie usuwają. –
@Computist Tak, to jest to, co robi "Dehighlighthide". – DavidC