2017-12-27 8 views
0

Ich arbeite von arrow_simple_demo.py here, die ich schon so modifiziert haben:Wie kwargs in matplotlib.axes.Axes.arrow Python verwenden 2.7

import matplotlib.pyplot as plt 

ax = plt.axes() 
ax.arrow(0, 0, 0.5, 0.5, head_width=0.05, head_length=0.1) 

aber ich will den Linienstil ändern des Pfeils mit einem Kwarg zu streichen. Die Pfeildokumente deuten darauf hin, dass es möglich ist. arrow docs

So habe ich versucht, das ** kwargs Argument Pfeil zu geben zu importieren:

kwargs = {linestyle:'--'} 

Jetzt sieht wie folgt aus meinem Code:

import matplotlib.pyplot as plt 

ax = plt.axes() 
kwargs={linestyle:'--'} 
ax.arrow(0, 0, 0.5, 0.5, head_width=0.05, head_length=0.1, **kwargs) 

Aber das Ergebnis ist:

NameError: name 'linestyle' is not defined 

Ich frage mich, ob jemand mir sagen kann, ob ich die Kwargs richtig verwende, und ob ich t brauche o Importieren Sie Patch aus der Patch-Klasse von Matplotlib, damit dies funktioniert. Die Aussage "Andere gültige Kwargs (geerbt von: Klasse: Patch)", die in den Pfeildokumenten über der Auflistung von Kwargs ist, lässt mich denken, dass es notwendig sein könnte. Ich habe mir auch die Patches angesehen, um diese Frage herauszufinden. here

EDIT:

-Code beendet, wenn ich Linienstil Schlüssel als String übergeben, aber ich bin nicht die gestrichelte Pfeillinie bekommen, die ich hatte gehofft.

import matplotlib.pyplot as plt 
ax = plt.axes() 
kwargs={'linestyle':'--'} 
ax.arrow(0, 0, 0.5, 0.5, head_width=0.05, head_length=0.1, **kwargs) 

siehe Bild:

arrow plot solid line

Antwort

0

Der Schlüssel Ihres kwargs Wörterbuch sollte ein String sein. In Ihrem Code sucht python nach einem Objekt namens linestyle, das nicht existiert.

kwargs = {'linestyle':'--'} 

Leider reicht das nicht, um den gewünschten Effekt zu erzielen. Die Zeile ist gestrichelt, aber das Problem ist, dass der Pfeil mit einem geschlossenen Pfad gezeichnet wird und die Striche übereinander gelegt werden, wodurch der Effekt aufgehoben wird. Sie können die gestrichelte Linie durch Auftragen eines dickeren Pfeils sehen.

ax = plt.axes() 
kwargs={'linestyle':'--', 'lw':2, 'width':0.05} 
ax.arrow(0, 0, 0.5, 0.5, head_width=0.05, head_length=0.1, **kwargs) 

enter image description here

Wenn Sie einen einfachen gestrichelten Pfeil wollen, müssen Sie einen einfacheren Pfeil verwenden, annotate

ax = plt.axes() 
kwargs={'linestyle':'--', 'lw':2} 
ax.annotate("", xy=(0.5, 0.5), xytext=(0, 0), 
    arrowprops=dict(arrowstyle="->", **kwargs)) 

enter image description here

+0

Oh so einen einfachen Fehler mit! Der Code endet jetzt, aber aus irgendeinem Grund immer noch eine durchgezogene Linie? – AF2k15

+0

Sehen Sie meine Bearbeitung zu der Frage, die Ihren Ratschlag widerspiegelt. Können Sie bestätigen, dass die Pfeillinie auf Ihrem System noch stabil ist? Es zeigt immer noch fest auf meiner. – AF2k15

+0

siehe weitere Informationen in meiner Antwort –