2012-08-22 13 views
5

मैं एक ध्रुवीय साजिश पर एक एजीमुथ-एलिवेशन वक्र की साजिश कर रहा हूं जहां ऊंचाई रेडियल घटक है। डिफ़ॉल्ट रूप से, Matplotlib परिधि पर 0 से केंद्र में 0 से रेडियल मान प्लॉट करता है। मैं उलटा करना चाहता हूं कि 90 डिग्री केंद्र में है। मैंने ax.set_ylim (90,0) पर कॉल के साथ सीमा निर्धारित करने का प्रयास किया लेकिन इसके परिणामस्वरूप LinAlgError अपवाद फेंक दिया गया। कुल्हाड़ी एक कॉल से add_axes में प्राप्त axes ऑब्जेक्ट है।Matplotlib ध्रुवीय भूखंडों पर रेडियल अक्ष सेट करें

क्या यह किया जा सकता है और, यदि हां, तो मुझे क्या करना चाहिए?

संपादित करें: यहां मैं अब उपयोग कर रहा हूं। बुनियादी अंकन कोड matplotlib उदाहरण

# 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() 

साजिश है कि इस से परिणाम में से एक से लिया गया है

enter image description here

+0

आपके पास पहले से कौन सा कोड है? इससे आपके प्रश्न का उत्तर देने में काफी मदद मिल सकती है (विशेष रूप से दूसरे भाग में)। – Evert

+0

मुझे लगता है कि एक मैपिंग फ़ंक्शन के साथ किया जा सकता है जो रेडियल निर्देशांक को घुमाता है और रेडियल लेबल मैन्युअल रूप से सेट करके। क्या यह पर्याप्त है या आप वास्तव में रेडियल धुरी को फिर से परिभाषित करना चाहते हैं? –

उत्तर

3

मैं डाल करने के लिए वह धुरी उल्टे रेडियल कामयाब रहे है। मैं त्रिज्या को पुन: मैप करने के लिए, क्रम में नई धुरी मिलान करने के लिए किया था:

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 

नोट सिर्फ एक हैक है कि, धुरी के केंद्र में 0 और परिधि में 90 के साथ अब भी है। आपको उन सभी चरों के लिए मैपिंग फ़ंक्शन का उपयोग करना होगा जिन्हें आप साजिश कर रहे हैं।

संबंधित मुद्दे