2017-09-15 20 views
8

मैं ध्रुवीय 'साइडर' प्लॉट बनाने की कोशिश कर रहा हूं लेकिन मुझे धुरी लेबल के साथ कुछ समस्याएं आ रही हैं। एक्सएक्सिस टिक लेबल्स हमेशा वाई अक्ष ग्रिड के नीचे एक परत पर समाप्त होने लगते हैं (अक्षरों को ग्रिड लाइन द्वारा कवर किया गया है, जैसा कि नीचे दिए गए आंकड़े में दिखाया गया है), मैं उन्हें शीर्ष पर ले जाना चाहता हूं।एक्सिस लेबल प्लस में अक्ष द्वारा छिपा हुआ है?

मैंने ज़ोरों को स्थापित करने की कोशिश की लेकिन बिना किसी सफलता के। यदि मैंने 2 से ऊपर प्लॉट लाइनों के ज़ेडर को सेट किया है तो वे अक्ष और ग्रिड के शीर्ष पर (परत के संदर्भ में) जाते हैं ... लेकिन मैं अभी भी प्लेटों को प्लॉट के शीर्ष पर दिखाना चाहता हूं। अगर मैं उन्हें नीचे 2 सेट करता हूं तो लाइनें ग्रिड के नीचे जाती हैं। ग्रिड या टिक्स लेबल्स के ज़ेडर को सेट करना प्रतीत नहीं होता है।

यहां मेरा प्रयास है: जैसा कि आप ग्रिड की लाल रेखा को 'उद्योग' के शीर्ष पर ऊपर देख सकते हैं जबकि ग्रिड की ग्रे रेखा नीचे रहती है। मैं दोनों लाइन के ऊपर और भूखंडों

import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 
import random 

data = random.sample(range(100), 5) 
data[0] = 100 
data[3] = 50 
index = ['industry', 'residential', 'agriculture', 'transport', 'other'] 
df1 = pd.DataFrame(data, index=index, columns=['data']) 
df2 = pd.DataFrame(np.array(data)/2, index=index, columns=['data']) 

fig = plt.figure() 

ax = fig.add_subplot(111, projection="polar") 

ax.grid(True) 
ax.yaxis.grid(color='r') 
ax.xaxis.grid(color='#dddddd') 

for spine in ax.spines.values(): 
    spine.set_edgecolor('None') 

theta = np.arange(len(df1))/float(len(df1))*2.*np.pi 

l1, = ax.plot(theta, df1["data"], color="gold", marker="o", label=None, zorder=1) # , zorder = -3) 
l2, = ax.plot(theta, df2["data"], color='tomato', marker="o", label=None, zorder=1.1) #, zorder =-2) 

def _closeline(line): 
    x, y = line.get_data() 
    x = np.concatenate((x, [x[0]])) 
    y = np.concatenate((y, [y[0]])) 
    line.set_data(x, y) 
[_closeline(l) for l in [l1, l2]] 

ax.fill(theta, df1["data"], "gold", alpha=1, zorder=1) 
ax.fill(theta, df2["data"], 'tomato', alpha=1, zorder=1.1) 

ax.set_rlabel_position(216) 
ax.set_xticks(theta) 
ax.set_xticklabels(df2.index, fontsize=12)#, zorder=1) 

legend = plt.legend(handles=[l1,l2], labels =['first','second'], loc='lower right') 

plt.title("data [unit]", fontsize = 16, y = 1.2) 


plt.savefig('atlas//trial2.png', bbox_inches='tight', dpi = 300) 
plt.show() 

Here is my attempt: as you can see the red lines of the grid end up on top of the text 'industry' while the gray line of the grid stays below. I would like 'industry' to be on top of both line and of the plots

+1

मैंने 'ज़ॉर्डर' के कई संयोजनों की कोशिश की है जो _should_ आपकी समस्या को प्रभावित करते हैं, इसका कोई फायदा नहीं हुआ। यह एक बग जैसा हो सकता है [इस पर] (https://github.com/matplotlib/matplotlib/issues/5045)। कार्टेरियाई लोगों की तुलना में ध्रुवीय भूखंड हमेशा थोड़ा अधिक समस्याग्रस्त प्रतीत होते हैं। अच्छी तरह से गठित प्रश्न के लिए Kudos चलाने योग्य उदाहरण के साथ पूरा! –

उत्तर

0

खैर के होने की 'उद्योग' चाहते हैं, यह मेरी समस्या भले ही यह एक अच्छा जवाब नहीं है हल करती है।

उपरोक्त स्क्रिप्ट में मैं ax.set_xticklabels(df2.index, fontsize=12) को अक्ष लेबल के बराबर पाठ के विकल्प के साथ निम्नलिखित के साथ प्रतिस्थापित करता हूं।

for it in np.arange(len(theta)): 
    txt = ax.text(theta[it], maxy*1.1, index[it], va = 'center', ha = 'center', fontsize = 12) 

ax.set_xticklabels('') 

'लेबल' अब धुरी और ग्रिड से ऊपर हैं।

+0

यदि आप इसके उत्तर को स्वीकार करते हैं, जबकि इसके बारे में कोई इनाम है, तो आप वास्तव में अन्य लोगों को इस मुद्दे को देखने के लिए प्रेरित नहीं कर सकते हैं, क्योंकि वे देखते हैं कि प्रश्न में पहले से ही एक स्वीकार्य समाधान है। – ImportanceOfBeingErnest

+0

धन्यवाद हटा दिया गया था, अगर मैं अंक वापस पाने जा रहा था तो बस परीक्षण कर रहा था :) – esperluette

+0

नहीं, यदि आप अपना उत्तर स्वीकार करते हैं तो अंक खो जाते हैं। यदि आप किसी और के जवाब को स्वीकार करते हैं, तो उन्हें पुरस्कृत किया जाएगा। – ImportanceOfBeingErnest

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