2016-03-03 6 views
7

मुझे आश्चर्य है कि अगर कोई प्लॉट अन्य प्लॉट्स के शीर्ष पर स्थित है, तो यह नियंत्रित करने का कोई तरीका है कि कोई एक धुरी पर एकाधिक भूखंड बनाता है। एक उदाहरण:Matplotlib नियंत्रण जो साजिश शीर्ष पर है

enter image description here

आप देख सकते हैं, हरी श्रृंखला नीले श्रृंखला के शीर्ष पर है, और दोनों श्रृंखला काले बिन्दुओं (जो मैं एक बिखराव साजिश से बनी) के शीर्ष पर हैं। मैं ब्लैक डॉट्स दोनों श्रृंखलाओं (रेखाओं) के शीर्ष पर होना चाहता हूं।

मैं पहली बार के लिए निम्न कोड

plt.plot(series1_x, series1_y) 
plt.plot(series2_x, series2_y) 
plt.scatter(series2_x, series2_y) 

साथ ऊपर किया तो मैं निम्नलिखित

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y) 

और उस पर कुछ रूपांतरों, लेकिन कोई किस्मत की कोशिश की।

आसपास plot कार्यों गमागमन एक प्रभाव है जिस पर साजिश शीर्ष पर है, लेकिन कोई फर्क नहीं पड़ता है जहाँ मैं scatter समारोह रखा, लाइनों डॉट्स के शीर्ष पर हैं।

नोट:

मैं Windows 10 (इस उदाहरण) पर पायथन 3.5 का उपयोग कर रहा है, लेकिन ज्यादातर अजगर 3.4 Ubuntu पर।

नोट 2:

मैं जानता हूँ कि यह एक छोटी सी मुद्दे की तरह लग सकता है, लेकिन मैं एक मामले में जहां डॉट्स के शीर्ष पर श्रृंखला इतने घने रहे हैं कि डॉट्स के रंग छिप मिल है, और में उन मामलों में मुझे अपने पाठकों को स्पष्ट रूप से देखने की ज़रूरत है कि कौन से बिंदु रंग हैं, इसलिए मुझे शीर्ष पर होने वाले बिंदुओं की आवश्यकता क्यों है।

+0

आप प्रत्येक नई साजिश के लिए सबप्लॉट अक्ष को फिर से क्यों बनाते हैं? आप केवल एक सबप्लॉट बना सकते हैं, फिर वहां अपनी सभी साजिश करें (और शीर्ष पर मौजूद नियंत्रण के लिए नीचे दिए गए उत्तरों में ज़ेडर का उपयोग करें) – tom

+0

मैंने उल्लेख किया कि मैंने वहां कुछ "बदलाव" किए हैं जो मैंने दिखाया - मैंने किया इसे केवल सबप्लॉट के साथ भी करें। मैं आमतौर पर plt.plot, plt.scatter, आदि के साथ ऐसा करता हूं।मैं आम तौर पर अक्षों और आकृति वस्तुओं के बारे में चिंता नहीं करता जब तक कि मुझे उन्हें विभिन्न कार्यों के आसपास पारित करने की आवश्यकता नहीं होती है और सभी प्रकार की फैंसी चीजें होती हैं। –

उत्तर

12

zorder kwarg का उपयोग करें जहां ज़ेडर को आगे की साजिश को पीछे छोड़ दें, उदा।

plt.plot(series1_x, series1_y, zorder=1) 
plt.plot(series2_x, series2_y, zorder=2) 
plt.scatter(series2_x, series2_y, zorder=3) 
+0

ग्रेट, पूरी तरह से काम करता है। अच्छा सुरुचिपूर्ण समाधान। मुझे लगता है कि 'zorder' मान पिछले साजिश के 'ज़ॉर्डर' पर डिफ़ॉल्ट रूप से चूकता है, एक से शुरू होता है? तो, मैं कहता हूं कि मैं 'ज़ेडर' के बिना' प्लॉट '(पहला वाला) करता हूं, कि' प्लॉट' में 'zorder = 1' है, अगली 'प्लॉट' (' zorder' निर्दिष्ट किए बिना) में' zorder = 2' है, आदि..? –

+0

क्षमा करें, उपरोक्त मेरी टिप्पणी में मेरा मतलब था कि "ज़ॉर्डर' मान पिछले प्लॉट के एक प्लस 'ज़ॉर्डर' मान पर डिफ़ॉल्ट है ..." –

+0

हां, यह मेरे परीक्षण में ऐसा तरीका दिखता है। – bernie

1

zorder उपयोग कर, और मूल्य जानने के अलावा एक अन्य समाधान: आप बस भूखंड आदेश का उपयोग अंक की एक बिखराव प्लॉट कर सकते हैं। कुछ plot(series2_x, series2_y, ' o') की तरह। ' o' पर एक स्पेस के साथ नोट करें, कोई रेखा नहीं बल्कि सर्कल पॉइंट्स। इस तरह अक्षों पर उन्हें साजिश करने का आदेश उन्हें शीर्ष पर रखता है।

+0

यह भी काम करता है, धन्यवाद। यदि मैं 'प्लॉट' का उपयोग करना चाहता हूं तो मैं मार्कर का आकार कैसे सेट करूं? 'स्कैटर' के साथ, मैंने बस सेट करने के लिए 's' पैरामीटर सेट किया है। –

+1

अपने विशिष्ट प्रश्न के लिए आप अपने प्लॉट कमांड में 'markersize = 10' या 'ms = 10' (या जो भी संख्या चाहते हैं) तर्क जोड़ सकते हैं। तर्क और कार्यक्षमता की पूरी सूची यहां देखी जा सकती है: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot – zephyr

1

हाँ, आप कर सकते हैं। बस zorder पैरामीटर का उपयोग करें। मूल्य जितना अधिक होगा, प्लॉट के ऊपर अधिक होगा।

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y, zorder=3) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, zorder=4) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y, zorder=5) 

वैकल्पिक रूप से, आप एक ही समय में लाइन और मार्कर प्लॉट कर सकते हैं। आप लाइन और मार्कर चेहरे के लिए अलग-अलग रंग भी सेट कर सकते हैं।

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, '-o', color='b', mfc='k') 

'-o' सेट साजिश शैली लाइन और चक्र मार्करों, नीले रंग के color='b' सेट लाइन रंग और mfc='k' सेट काला करने के लिए मार्कर चेहरे रंग।

+0

यह सुनिश्चित नहीं है कि यह उत्तर क्यों कम किया गया था - यह वही जानकारी अन्य के रूप में दिया गया (अच्छा) जवाब और एक सभ्य विकल्प भी दिया। –

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