2013-03-12 12 views
6

Używam quiver narysować wektory w matplotlib:Wykreślanie przerywanych wektorów 2D z matplotlib?

from itertools import chain 
import matplotlib.pyplot as pyplot 
pyplot.figure() 
pyplot.axis('equal') 
axis = pyplot.gca() 
axis.quiver(*zip(*map(lambda l: chain(*l), [ 
    ((0, 0), (3, 1)), 
    ((0, 0), (1, 0)), 
])), angles='xy', scale_units='xy', scale=1) 

axis.set_xlim([-4, 4]) 
axis.set_ylim([-4, 4]) 
pyplot.draw() 
pyplot.show() 

który daje mi ładne strzały, ale w jaki sposób mogę zmienić ich styl linia przerywana, przerywana, itd.?

+1

'lineStyle = 'dashed'' ma działać, (zgodnie z dokumentacją) (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.quiver). Oczywiście nie działa. To prawdopodobnie błąd. –

+0

@JoeKington: :(Jakieś sugestie dotyczące obejścia problemu? – Mehrdad

+0

Nie z mojej głowy, niestety ... –

Odpowiedz

10

Ah! W rzeczywistości, linestyle='dashed' działa, po prostu strzały kołczanów są wypełniane domyślnie i nie mają zestawu linii. To łaty zamiast ścieżek.

Jeśli zrobisz coś takiego:

import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 
ax.axis('equal') 

ax.quiver((0,0), (0,0), (3,1), (1,0), angles='xy', scale_units='xy', scale=1, 
      linestyle='dashed', facecolor='none', linewidth=1) 

ax.axis([-4, 4, -4, 4]) 
plt.show() 

enter image description here

Dostaniesz przerywane strzałki, ale chyba nie do końca, co miałeś na myśli.

Można bawić z niektóre parametry, aby uzyskać nieco bliżej, ale jeszcze dokładnie nie wyglądają ładnie:

import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 
ax.axis('equal') 

ax.quiver((0,0), (0,0), (3,1), (1,0), angles='xy', scale_units='xy', scale=1, 
      linestyle='dashed', facecolor='none', linewidth=2, 
      width=0.0001, headwidth=300, headlength=500) 

ax.axis([-4, 4, -4, 4]) 
plt.show() 

enter image description here

Dlatego kolejnym Rozwiązaniem byłoby wykorzystanie luki :

import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 
ax.axis('equal') 

ax.quiver((0,0), (0,0), (3,1), (1,0), angles='xy', scale_units='xy', scale=1, 
     hatch='ooo', facecolor='none') 

ax.axis([-4, 4, -4, 4]) 
plt.show() 

enter image description here

+0

+1 dziękuję, lepiej niż nic, ale nadal nie jest idealny haha ​​ – Mehrdad

+0

Drugi problem: jeśli powiększamy do innego aspektu stosunek grotu staje się zniekształcony. –

Powiązane problemy