2016-07-19 15 views
3

Ich möchte nur eine reine Sektorlinie, kein Keil. Ich versuche es zu verwenden, um die Unsicherheit der Richtung eines Vektors an der Spitze des Vektorpfeils darzustellen. Ich verwende plt.arrow, um den Pfeil über eine Grundkarte in Matplotlib zu zeichnen.Wie zeichnest du einen Sektor in Matplotlib?

Ich habe keine Möglichkeit gefunden, diese Unsicherheit anders auszudrücken als mit einem Keil. Ich habe mich gefragt, ob es möglich ist, nur eine Sektorlinie an der Spitze des Pfeils zu zeichnen.

Antwort

5

Angenommen, Sie haben einen beliebigen Vektor v relativ zu einem Ursprung v_origin, und es ist Winkel Unsicherheit in Grad:

import pylab as plt 
import numpy as np 
#plt.style.use('ggplot') # because it's just better ;) 

v_origin = [.2, .3] 
v = [1., 1.] 
angular_uncert = 20. # angular uncertainty of vector in degrees 
v_angle = np.arctan2(v[1] ,v[0]) # starting angle 

# plot the arrow 
fig = plt.figure(1) 
ax = plt.gca() 
ax.arrow(v_origin[0], v_origin[1] ,v[0], v[1], 
    head_width=0.05, 
    head_length=0.1, 
    lw=2, 
    fc='#777777', 
    ec='#777777', 
    length_includes_head=True) 

# plot the sector line 
uncert = (angular_uncert/2.) *np.pi/180. 
r = np.linalg.norm(v) # length of vector 
t = np.linspace(v_angle - uncert , v_angle+uncert , 100) # angular range of sector 
x = r* np.cos(t) + v_origin[0] # sector x coords 
y = r* np.sin(t) + v_origin[1] # sector y coords 
ax.plot(x,y, lw=2, ls='--') # plot the sector 
ax.plot(v_origin[0], v_origin[1], 'o', ms=10, c='Limegreen') # plot the origin 

# adjust the figure 
ax.set_xlim(0, 1.6) 
ax.set_ylim(0, 1.6) 
ax.set_aspect('equal') 
fig.show() 

enter image description here

+0

Das sieht genau wie das, was ich will, aber ich habe Probleme bekommen der Pfeil zum Plotten unter Verwendung von Längen- und Breitenkoordinaten. Wenn ich die Koordinaten des Mittelpunkts des Kreises und die Unsicherheit habe, wie könnte ich das in einer Karte replizieren? – noggy

+1

Ich habe einen Ursprungsparameter hinzugefügt - vielleicht hilft das? Stellen Sie nur sicher, dass Ihr Vektor relativ zu den Koordinaten des Ursprungs – dermen

+0

schön ist. Danke – noggy