2012-01-19 9 views
7

Używam GraphPlot do rysowania ukierunkowanych wykresów z około 100 wierzchołkami. Zamieniam każdy wierzchołek na mały prostokątny lub kwadratowy obraz, definiując VertexRenderingFunction. Obrazy często nakładają się na siebie. Czy istnieje sposób na uzyskanie Mathematica, aby oddalić wierzchołki, aby zapobiec ich nakładaniu?W języku Mathematica. W przypadku korzystania z obrazów jako wierzchołków w GraphPlot, w jaki sposób zapobiec nakładaniu się obrazów?

Próbowałem różnych oczywistych opcji "Metody" ("SpringElectricalEmbedding", "SpringEmbedding", "HighDimensionalEmbedding", "CircularEmbedding", "RandomEmbedding", "LinearEmbedding").

trans = {1 -> 1, 2 -> 1, 3 -> 1, 4 -> 1, 5 -> 1, 6 -> 1, 7 -> 1, 
8 -> 1, 9 -> 1, 10 -> 1, 11 -> 1, 12 -> 1, 13 -> 1, 14 -> 1, 
15 -> 1, 16 -> 1, 17 -> 1, 18 -> 13, 19 -> 1, 20 -> 13, 21 -> 13, 
22 -> 70, 23 -> 1, 24 -> 1, 25 -> 1, 26 -> 1, 27 -> 13, 28 -> 13, 
29 -> 1, 30 -> 13, 31 -> 13, 32 -> 1, 33 -> 19, 34 -> 70, 35 -> 70, 
36 -> 1, 37 -> 1, 38 -> 1, 39 -> 39, 40 -> 13, 41 -> 2, 42 -> 13, 
43 -> 1, 44 -> 2, 45 -> 1, 46 -> 52, 47 -> 2, 48 -> 68, 49 -> 49, 
50 -> 19, 51 -> 78, 52 -> 1, 53 -> 1, 54 -> 39, 55 -> 13, 56 -> 56, 
57 -> 13, 58 -> 13, 59 -> 1, 60 -> 36, 61 -> 1, 62 -> 52, 63 -> 2, 
6 4 -> 68, 65 -> 19, 66 -> 56, 67 -> 4, 68 -> 76, 69 -> 19, 
70 -> 78, 71 -> 1, 72 -> 39, 73 -> 52, 74 -> 56, 75 -> 23, 
76 -> 76, 77 -> 56, 78 -> 78}; 

image = {{1, 0, 0, 0, 0}, {0, 1, 0, 0, 0}}; 

GraphPlot[trans, DirectedEdges -> True, VertexLabeling -> True, 
VertexRenderingFunction -> (Inset[ 
ArrayPlot[image, ImageSize -> 15, Mesh -> True], #1] &)] 

Output

+2

Witamy w Stackoverflow. Dlaczego nie podasz kodu, którego użyłeś (lub jego próbkowania), abyśmy mogli zbadać problem, który masz. – DavidC

+0

Dzięki za informację zwrotną, zapoznaję się z kilkoma sugestiami, które podjąłeś. Dodałem przykład, który może pomóc w wyjaśnieniu mojego pytania. – Martijn

+0

Czy planujesz mieć identyczne obrazy dla każdego z wierzchołków? A może niektóre wierzchołki będą wyglądać inaczej? (Mam powód do pytania). – DavidC

Odpowiedz

3

Edit [Zacząłem nad oparciu o przykład dałeś]:

Korzystanie trans i image można spróbować: pojawi

p = ArrayPlot[image, ImageSize -> 35, Mesh -> True]; 

Graph[trans, DirectedEdges -> True, VertexLabels -> Placed[p, Tooltip], 
    ImagePadding -> 10, ImageSize -> 500] 

ilustracje w tooltipach, gdy przesuniesz myszką po każdym wierzchołku. Jeśli chcesz, możesz użyć różnych obrazów dla różnych etykiet wierzchołków; po prostu użyj listy zasad.

Poniższy obrazek pokazuje, jak wygląda (bez etykiet narzędzi). Kliknij na link, aby zobaczyć, jak działa z etykietkami narzędzi.

graph

+0

To całkiem fajny sposób na zrobienie tego! Nie używałeś już podpowiedzi. Ale ja drukuję obrazy, by umieścić je w mojej pracy magisterskiej, chciałbym móc zobaczyć wszystkie obrazy naraz. – Martijn

+0

Tak, etykietki narzędzi nie będą wyświetlane na papierze. Wygląda więc na to, że wykres może być rysowany nieco większy niż pierwotnie zakładałeś. Nie ma żadnego powodu, z góry, dlaczego nie możesz użyć całej strony do wyświetlenia rysunku z podpisem, prawda? W tej skali Twoje obecne rozwiązanie za pośrednictwem 'GraphPlot' powinno działać. Gdybym potrzebował jeszcze większej kontroli nad renderowaniem, używałbym OmniGraffle Pro (dla Maca) lub Visio. Dla jednorazowego rozwiązania to zadziała. Jeśli masz wiele liczb ze 100 wierzchołkami, ilość pracy będzie wygórowana. – DavidC

+0

Mam wiele tego typu wykresów. Duża część już edytowałem za pomocą ipe, ale jest to dość czasochłonne. Miałem nadzieję, że istnieje ogólne rozwiązanie. Niewielkim problemem przy skalowaniu figur jest to, że podczas zmiany rozmiaru rysunków poprzez przeciągnięcie rogu obrazu, rozmiar strzałek na skalowanych krawędziach i jeden lub dwa obrazy mogą nadal zachodzić na siebie, co wymaga ręcznej edycji (co jest już lepsze) , ale byłoby miło mieć idealne rozwiązanie, w którym wszystko dzieje się mniej więcej automatycznie. Dzięki za dotychczasowy wkład! Nauczyłem się kilku nowych sztuczek. – Martijn

Powiązane problemy