2012-08-22 18 views
5

Yüksekliklerin radyal bileşen olduğu kutup çiziminde bir azimut yükseklik eğrisi çiziyorum. Varsayılan olarak, Matplotlib merkezdeki 0'dan radyal değeri çevredeki 90'a çizer. Tersine 90 derece merkezde olduğunu tersine çevirmek istiyorum. Ax.set_ylim (90,0) çağrısı ile sınırları belirlemeye çalıştım, ancak bu, atılan bir LinAlgError istisnasının sonucudur. ax, add_axes çağrısından elde edilen eksen nesnesidir.Matplotlib polar eğrilerinde radyal ekseni ayarlayın

Bu yapılabilir ve eğer öyleyse, ne yapmalıyım?

Düzenleme: İşte şimdi kullanıyorum. Temel çizim kodu Matplotlib örnekler

# radar green, solid grid lines 
rc('grid', color='#316931', linewidth=1, linestyle='-') 
rc('xtick', labelsize=10) 
rc('ytick', labelsize=10) 

# force square figure and square axes looks better for polar, IMO 
width, height = matplotlib.rcParams['figure.figsize'] 
size = min(width, height) 
# make a square figure 
fig = figure(figsize=(size, size)) 
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], projection='polar', axisbg='#d5de9c') 

# Adjust radius so it goes 90 at the center to 0 at the perimeter (doesn't work) 
#ax.set_ylim(90, 0) 

# Rotate plot so 0 degrees is due north, 180 is due south 

ax.set_theta_zero_location("N") 

obs.date = datetime.datetime.utcnow() 
az,el = azel_calc(obs, ephem.Sun()) 
ax.plot(az, el, color='#ee8d18', lw=3) 
obs.date = datetime.datetime.utcnow() 
az,el = azel_calc(obs, ephem.Moon()) 
ax.plot(az, el, color='#bf7033', lw=3) 

ax.set_rmax(90.) 
grid(True) 

ax.set_title("Solar Az-El Plot", fontsize=10) 
show() 

bu kaynaklanan arsa birinden alınmış o eksen ters radyal koymak başardı

enter image description here

+0

Hangi kodunuz var? Bu, sorunuzu cevaplamanıza yardımcı olabilir (özellikle ikinci kısım). – Evert

+0

Bunun, radyal koordinatları tersine çeviren ve radyal etiketleri manuel olarak ayarlayan bir haritalama fonksiyonu ile yapılabileceğini hayal ediyorum. Bu yeterli mi yoksa radyal ekseni yeniden tanımlamak mı istiyorsunuz? –

cevap

3

olduğunu. Yeni eksenini maç için, yarıçapı yeniden eşleştirmek zorunda:

fig = figure() 
ax = fig.add_subplot(1, 1, 1, polar=True) 

def mapr(r): 
    """Remap the radial axis.""" 
    return 90 - r 

r = np.arange(0, 90, 0.01) 
theta = 2 * np.pi * r/90 

ax.plot(theta, mapr(r)) 
ax.set_yticks(range(0, 90, 10))     # Define the yticks 
ax.set_yticklabels(map(str, range(90, 0, -10))) # Change the labels 

Not sadece kesmek, eksen çevresine de merkezde 0 ile 90 ile hala. Haritalama fonksiyonunu, çizdiğiniz tüm değişkenler için kullanmanız gerekecektir.