2010-09-26 9 views
3

En attendant que le sorting se termine, j'aimerais ajuster une partie du graphique Mathematica sur lequel je travaille. Le problème est que les nœuds sont au-dessus des bords, je me demande s'il y a un moyen d'inverser cela. Dans l'image, vous pouvez voir que les flèches ne montrent pas ...Mathematica GraphPlot et la fonction EdgeRendering

Je fais un GraphPlot[] avec des paramètres personnalisés VertexRenderingFunction et EdgeRenderingFunction. Il ressemble à ceci:

Where are the arrows? Can you see them? Did you take my arrows? http://img816.imageshack.us/img816/9703/graphbadarrows.png

Comme vous pouvez le voir, ce serait comme on dit frais si les flèches étaient au-dessus des nœuds. Y at-il un moyen facile de hax dans?

+4

Cela semble soigné, pouvez-vous partager le code que vous avez écrit pour cela? –

Répondre

3

La réponse de Mark fait exactement ce que vous avez demandé - et vous pouvez écrire votre propre fonction qui automatise l'inverse.

Une solution moins directe pourrait être de tirer juste les têtes de flèche arrière de la fin un peu:

GraphPlot[Table[i -> Mod[3 i + 1, 9], {i, 0, 8}], 
VertexRenderingFunction -> ({{White, Disk[#, 0.15]}, 
    Circle[#, 0.15]} &), DirectedEdges -> True, 
EdgeRenderingFunction -> ({Arrowheads[{{.05, .8}}], Red, 
    Arrow[#]} &)] 

Cela réduirait aussi la congestion au niveau des nœuds.

+0

Merci, cela a fonctionné ... après un certain temps. :) – Gleno

4

Je ne sais pas s'il existe un moyen de le faire directement avec les options GraphPlot mais vous pouvez manipuler directement l'objet Graphics produit par GraphPlot. Par exemple, voici un graphique dont les caractéristiques sont similaires aux vôtres.

bg = GraphPlot[Table[i -> Mod[3 i + 1, 9], 
    {i, 0, 8}], DirectedEdges -> True, 
    VertexRenderingFunction -> (
    {{White, Disk[#, 0.15]}, Circle[#, 0.15]} &), 
    EdgeRenderingFunction -> (Arrow[#1] &)] 

Vous pouvez examiner la structure des primitives et directives graphiques comme suit:

bg // InputForm 

Vous pouvez voir que les flèches sont placées en bas avant les sommets. Il suffit de renverser ceci comme suit.

MapAt[Reverse, bg, {1, 1}] 

Bien sûr, votre objet Graphics aura probablement une structure différente.

Mark McClure

+0

Ça a l'air génial, je vais essayer ça et faire un rapport! – Gleno