2016-04-26 21 views
0

Ich erstellte ein Diagramm mit mehreren Unterplattformen auf einem Raster. Die Diagramme unterscheiden sich in zwei Parametern, daher möchte ich, dass sie so aussehen, als ob sie in einem Koordinatensystem angeordnet wären.Zeichnen Sie Pfeile auf Matplotlib Abbildung direkt

Ich habe es geschafft, Zeilen mit matplotlib.lines.Line2D() neben den Unterplots direkt in der Abbildung zu plotten. Aber ich würde lieber einen Pfeil anstelle einer Linie haben, um es klarer zu machen. (Ich kann die spezifischen Parameterwerte mit fig.text() hinzufügen.)

I'd like the blue lines to be arrows

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import numpy as np 
from itertools import product 

fig = plt.figure() 
plotGrid = mpl.gridspec.GridSpec(2, 2) 

x = np.linspace(0,10,10000) 
y = [j* np.sin(x + i) for i,j in product(range(2), range(1,3))] 

for i in range(4): 
    ax = plt.Subplot(fig, plotGrid[i]) 

    for sp in ax.spines.values(): 
     sp.set_visible(False) 

    ax.plot(x,y[i], color = 'r') 
    ax.set_xticks([]) 
    ax.set_yticks([]) 
    fig.add_subplot(ax) 

all_axes = fig.get_axes() 


#I would like these lines to be arrows 
blcorPosn = 0.08 #bottom corner position 
l1 = mpl.lines.Line2D([blcorPosn,blcorPosn], [1, blcorPosn], 
         transform=fig.transFigure, fig) 

l2 = mpl.lines.Line2D([blcorPosn, 1], [blcorPosn, blcorPosn], 
         transform=fig.transFigure, fig) 

fig.lines.extend([l1, l2]) 

Ich bin nicht sicher, ob dies der Weg zu gehen. Aber ich verbringe jetzt einen Tag damit und die einzige Art, wie ich bis jetzt Pfeile zeichne, ist, sie direkt auf eine Achse zu zeichnen, aber das ist für mich keine Option, soweit ich das sehen kann.

Auch dies ist mein erster Beitrag hier, so dass Ratschläge, wie man Fragen stellt, sehr geschätzt wird. Dank

+0

http://matplotlib.org/examples/pylab_examples/arrow_simple_demo.html –

+0

andere Sache, die vielleicht, nur werden Sie vielleicht helfen: http://matplotlib.org/users/pyplot_tutorial.html # Annotations-Text – Drachenfels

Antwort

0

Sie können die Line2D entlang jeder Achse mit einem leicht modifizierten Aufruf an FancyArrow Patch ersetzen. Der Hauptunterschied besteht darin, dass der Ursprung und das Ziel x,y Coords mit Ursprung x,y und x,y Entfernung zum Zeichnen ersetzt werden. Die Werte werden auch direkt als Parameter übergeben, nicht als Listen:

l1 = mpl.patches.FancyArrow(blcorPosn, blcorPosn, 1, 0, 
          transform=fig.transFigure, figure=fig) 

l2 = mpl.patches.FancyArrow(blcorPosn, blcorPosn, 0, 1, 
          transform=fig.transFigure, figure=fig) 

Der FancyArrow Patch akzeptiert einige andere Parameter, damit Sie das Aussehen des Pfeils einschließlich width (für Linienbreite), head_width und head_length anpassen.

Figure with axis arrows

Verwandte Themen