Matplotlib: Zeichnen Sie einen vertikalen Pfeil in einem logarithmischen Plot

8

Ich kann im folgenden logarithmischen Plot keinen einfachen senkrechten Pfeil zeichnen:

%Vor%

Es zeigt einfach nicht. Aus der Dokumentation sieht es so aus, als ob alle Argumente wie Breite, Höhe usw. sich auf die Skalierung der Achse beziehen. Dies ist sehr kontraintuitiv. Ich habe versucht, twin() des Axisartist-Pakets zu verwenden, um eine Achse über meiner mit den Grenzen (0,1) , (0,1) zu definieren, um mehr Kontrolle über die Parameter des Pfeils zu haben, aber ich konnte nicht herausfinden, wie man eine völlig unabhängige Achse hat oben auf dem primären.

Irgendwelche Ideen?

    
janoliver 02.08.2012, 16:44
quelle

3 Antworten

4

Unterplot-Ansatz

Nach dem Erstellen der Unterplots tun Sie folgendes

  • Richten Sie die Positionen
  • aus
  • Verwenden Sie set_axis_off() , um die Achse auszuschalten (Ticks, Beschriftungen usw.)
  • Zeichne den Pfeil!

Also ein paar Zeilen bekommen, was Sie wollen!

z. B.

%Vor%

Daten neu skalieren

Alternativ ist ein möglicherweise einfacherer Ansatz, obwohl die Achsenbeschriftungen knifflig sein können,, die Daten neu zu skalieren.

d.

%Vor%

Keine großartige Lösung, aber ein anständiges Ergebnis, wenn Sie mit den Tick-Etiketten umgehen können!

    
jmetz 02.08.2012, 17:20
quelle
5

Ich habe nach einer Antwort auf diese Frage gesucht und eine nützliche Antwort gefunden! Sie können jedes "Mathtext" -Zeichen (Matplotlibs LaTeX-Version) als Markierung angeben. Versuchen: plt.plot (x, y, 'ko', Markierung = r '$ \ downarrow $', Markierungsgröße = 20)

Dies wird einen nach unten weisenden, schwarzen Pfeil an der Position (x, y) darstellen, der auf jedem Diagramm gut aussieht (sogar log-log). Siehe: matplotlib.org/users/mathtext.html#mathtext-tutorial für weitere Symbole, die Sie verwenden können.

    
Ben 14.06.2013 21:12
quelle
1

Ich weiß, dass dieser Thread schon lange tot ist, aber ich denke, meine Lösung könnte hilfreich für jeden sein, der versucht, herauszufinden, wie man Pfeile auf Log-Scale-Plots effizient zeichnet.

Als Alternative zu dem, was andere bereits gepostet haben, könnten Sie ein Transformationsobjekt verwenden, um den Wert einzugeben Pfeilkoordinaten nicht im Maßstab der Originalachsen, sondern im (linearen) Maßstab der "Achsenkoordinaten". Was ich unter Achsenkoordinaten verstehe, sind diejenigen, die auf [0,1] (horizontaler Bereich) um [0,1] (vertikaler Bereich) normalisiert sind, wobei der Punkt (0,0) die untere linke Ecke und der Punkt wäre (1,1) wäre die obere rechts, und so weiter. Dann könnten Sie einfach einen Pfeil einfügen:

%Vor%

Dies ergibt einen Pfeil, der diagonal über 4/5 des horizontalen und vertikalen Bereichs des Diagramms verläuft, von links unten nach rechts oben (wobei plot1 der Name des Unterplotts ist).

Wenn Sie das im Allgemeinen tun wollen, wo die exakten Koordinaten (x0,y0) und (x1,y1) im logarithmischen Raum für den Pfeil angegeben werden können, ist das nicht schwer, wenn Sie zwei Funktionen fx(x) und% co_de schreiben %, die von den ursprünglichen Koordinaten in diese "Achsen" -Koordinaten umgewandelt werden. Ich habe ein Beispiel gegeben, wie der ursprüngliche Code, der vom OP gepostet wurde, geändert werden könnte, um dies unten zu implementieren (Entschuldigung dafür, dass ich die Bilder, die der Code produziert, nicht enthalte, ich habe noch nicht die erforderliche Reputation).

%Vor%     
antibrane 28.09.2015 17:18
quelle

Tags und Links