मैं मेटप्लोटलिब में एक खाली सबप्लॉट कैसे बना सकता हूं?


85

मैं matplotlib में सबप्लॉट (जैसे, 3 x 2) का एक समूह बना रहा हूं, लेकिन मेरे पास 6 से कम डेटासेट हैं। मैं शेष सबप्लॉट को खाली कैसे बना सकता हूं?

व्यवस्था इस तरह दिखती है:

+----+----+
| 0,0| 0,1|
+----+----+
| 1,0| 1,1|
+----+----+
| 2,0| 2,1|
+----+----+

यह कई पृष्ठों के लिए चल सकता है, लेकिन अंतिम पृष्ठ पर, उदाहरण के लिए, 2,1 बॉक्स में 5 डेटासेट खाली होंगे। हालाँकि, मैंने यह आंकड़ा घोषित किया है:

cfig,ax = plt.subplots(3,2)

इसलिए सबप्लॉट 2,1 के लिए अंतरिक्ष में टिक्स और लेबल के साथ कुल्हाड़ियों का एक डिफ़ॉल्ट सेट है। मैं प्रोग्राम स्पेस को खाली और कुल्हाड़ियों से रहित कैसे प्रस्तुत कर सकता हूं?

जवाबों:


144

आप हमेशा उन कुल्हाड़ियों को छिपा सकते हैं जिनकी आपको आवश्यकता नहीं है। उदाहरण के लिए, निम्न कोड पूरी तरह से 6 अक्षों को बंद कर देता है:

import matplotlib.pyplot as plt

hf, ha = plt.subplots(3,2)
ha[-1, -1].axis('off')

plt.show()

और निम्नलिखित आंकड़े में परिणाम:

रेखांकन की 3x2 ग्रिड की एक छवि, जिसका कोई ग्राफ नीचे दायें सेल में नहीं है

वैकल्पिक रूप से, प्रश्न के स्वीकृत उत्तर को देखें कुल्हाड़ी रखने के तरीके के लिए मेटप्लोटलिब भूखंडों में अक्ष अक्ष पाठ को छिपाएं लेकिन सभी अक्षों की सजावट (जैसे टिक मार्क और लेबल) को छिपाएं


धन्यवाद - यह वास्तव में मेरे मूल प्रश्न के भी करीब है। मैंने पहले से ही दूसरे उत्तर को स्वीकार कर लिया और इसका उपयोग करने के लिए अपने कोड को अनुकूलित किया, लेकिन दोनों दृष्टिकोण बहुत अच्छे हैं।
mishaF

कूल, यह वास्तव में अच्छा है क्योंकि कम add_subplot()अव्यवस्था है।
मूओईपिप

यह marvependous है!
फ़ॉफ़ी

यह कोई प्लॉट नहीं दिखाता है और कोई कह सकता है कि यह एक खाली प्लॉट है। मैं एक ऐसे प्लॉट की तलाश में था जिसका कोई डेटा नहीं है, यह स्पष्ट रूप से दिखाने के लिए कि कोई डेटा नहीं है। इस उत्तर का कोई आसान संशोधन, जो ऐसा करता है?
ज़ेलफिर कल्टस्टाहल

@Zelphir मुझे यकीन नहीं है कि आप क्या कर रहे हैं: अन्य पाँच भूखंड बिना किसी डेटा के खाली ग्राफ़ हैं, इसलिए मुझे यकीन नहीं है कि आप क्या अतिरिक्त पूछ रहे हैं। साथ ही, यह एक नया प्रश्न है। भविष्य में, कृपया इसे एक पुराने उत्तर पर टिप्पणी करने के बजाय एक नया प्रश्न पूछें।
क्रिस

26

इस प्रश्न के पहले पूछे जाने के बाद एक बहुत बेहतर सबप्लॉट इंटरफ़ेस को matplotlib में जोड़ा गया है। यहाँ आप एक्स्ट्रास को छुपाये बिना अपनी ज़रूरत के सबप्लॉट बना सकते हैं। इसके अलावा, सबप्लॉट अतिरिक्त पंक्तियों या स्तंभों को फैला सकते हैं।

import pylab as plt

ax1 = plt.subplot2grid((3,2),(0, 0))
ax2 = plt.subplot2grid((3,2),(0, 1))
ax3 = plt.subplot2grid((3,2),(1, 0))
ax4 = plt.subplot2grid((3,2),(1, 1))
ax5 = plt.subplot2grid((3,2),(2, 0))

plt.show()

यहां छवि विवरण दर्ज करें


वाह - यह एक अच्छा सुधार है। इतना सरल! धन्यवाद @ हूक!
mishaF

@ देखा, कि आखिरी खाली जगह एक किंवदंती जोड़ने के लिए एकदम सही है। क्या आप किंवदंती को वहां स्थापित करने का कोई तरीका जानते हैं?
स्टेफानो

@Stefano यकीन है कि ऐसा करने के तरीके हैं - लेकिन यह एक नए प्रश्न के रूप में सबसे अच्छा होगा, आप इस प्रश्न को अपने प्रश्न में भी जोड़ सकते हैं (StackOverflow btw में आपका स्वागत है!)
Hooked

6

यह भी संभव है कि Axes.set_v अदृश्य () विधि का उपयोग करके एक सबप्लॉट को छिपाया जाए।

import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure()
data = pd.read_csv('sampledata.csv')

for i in range(0,6):
ax = fig.add_subplot(3,2,i+1)
ax.plot(range(1,6), data[i])
if i == 5:
    ax.set_visible(False)

आपका उत्तर मूल एक्सिस और विस्तारित जियोएक्स दोनों के लिए बहुत अच्छा है!
फी याओ

1

क्या यह ज़रूरत पड़ने पर सबप्लॉट बनाने का विकल्प होगा?

import matplotlib
matplotlib.use("pdf")
import matplotlib.pyplot as plt

plt.figure()
plt.gcf().add_subplot(421)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(422)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(423)
plt.fill([0,0,1,1],[0,1,1,0])
plt.suptitle("Figure Title")
plt.gcf().subplots_adjust(hspace=0.5,wspace=0.5)
plt.savefig("outfig")

मुझे ऐसा नहीं लगता क्योंकि कुछ अन्य प्रारूपण चीजें हैं जो मुझे करने की आवश्यकता है कि मैं संक्षिप्तता के मूल प्रश्न में शामिल नहीं था। इनमें से एक है plt.subplots_adjust (wspace = 0, hspace = 0)। मुझे यकीन नहीं है कि इस तथ्य के बाद काम करेगा।
mishaF

@ मीशाएफ: आप इस दृष्टिकोण का उपयोग करके सबप्लॉट्स_एडोस () कर सकते हैं। मेरा संपादन देखें।
मूओइपिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.