Mathematica: Beschriftung bestimmter Scheitelpunkte in GraphPlot

  • Wie kann ich bestimmte Scheitelpunkte in GraphPlot beschriften? Und haben die Pfeile entsprechend Platz für die Breite der Beschriftung?

    Ich habe Mathematica 7, aber ich denke, dass diese Frage für alle Versionen gilt.

    Mathematica: Beschriftung bestimmter Scheitelpunkte in GraphPlot

    Bearbeiten: Ich habe das obige Diagramm gepostet, damit Sie sehen, dass die Überlappung der Beschriftung die angezeigten Informationen stört.

    Lassen Sie uns der Einfachheit halber eine Mockgrafik ausführen:

    Generieren Sie die Daten:

     data = #[[1]] -> #[[2]] & /@ Partition[RandomInteger[10, 100], 2]
     

    Zeichnen Sie die Grafik:

     GraphPlot[data, EdgeRenderingFunction -> ({Red, {Arrowheads[Small], Arrow[#1, .07]}} &)]
     

    Gibt etwas aus wie:

    Mathematica: Beschriftung bestimmter Scheitelpunkte in GraphPlot

    Wenn ich explizit "1" und "5" beschriften wollte, habe ich hier ' m komplett verloren:

    Ich bin jetzt mit den hässlichen gelben Kästchen zufrieden:

     GraphPlot[data,EdgeRenderingFunction->({Red,{Arrowheads[Small],Arrow[#1,.07]}}&), VertexLabeling->True]
     

    Mathematica: Beschriftung bestimmter Scheitelpunkte in GraphPlot

    Es kann jedoch problematisch sein, wenn ich jeden Punkt in der ersten Grafik beschrifte. Ich wünschte, die VertexLabelingFunction -Hilfeseiten wären ein wenig gründlicher, sie scheinen lediglich eine Art regelbasierter und keine expliziten Beschriftungen zu sein. Ich denke, es wird ein paar sein VertexLabelingFunction -> (If[#1 == "1" || #1 == "5", Text[#1]])& Aber das gibt mir immer einen Fehler.

    19 February 2012
    Mr.Wizard
1 answer
  • Sie könnten so etwas tun. Es ist eine Anpassung des ersten Beispiels in der Dokumentation für VertexLabelingFunction, in der ich mithilfe einer If -Anweisung festgestellt habe, ob ein Scheitelpunkt beschriftet werden soll oder nicht. Die Funktion offset ist nur eine Hilfsfunktion, um zu bestimmen, um wie viel die Pfeile gekürzt werden sollen, je nachdem, ob sie an einem beschrifteten Knoten beginnen oder beginnen und lblLst ist die Liste der zu beschriftenden Knoten >

     lblLst = {1, 5, 10};
    
    offset[lblLst_, edge : {e1_, e2_}] := If[MemberQ[lblLst, #], .13, .07] & /@ edge
    
    GraphPlot[data, 
     EdgeRenderingFunction ->
      ({Red, Arrowheads[Small], Arrow[#1, offset[lblLst, #2]]} &),
    
     VertexRenderingFunction -> (If[MemberQ[lblLst, #2],
         {White, EdgeForm[Black], Disk[#, .1], Black, Text[#2, #1]},
         {Blue, Point[#1]}] &)]
     

    Mathematica: Beschriftung bestimmter Scheitelpunkte in GraphPlot

    11 February 2012
    EAMannAndrew