2012-04-05 26 views
44

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

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

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

यह कई पृष्ठों के लिए पर जा सकते हैं, लेकिन अंतिम पृष्ठ पर, देखते हैं, उदाहरण के लिए, 2,1 बॉक्स करने के लिए 5 डेटासेट खाली हो जाएगा। टिक और लेबल के साथ कुल्हाड़ियों के डिफ़ॉल्ट सेट वहाँ है subplot 2,1 के लिए

cfig,ax = plt.subplots(3,2) 
अंतरिक्ष में

तो: हालांकि, मैं के रूप में आंकड़ा घोषित किया है। मैं उस स्थान को रिक्त रूप से रिक्त और अक्षों से रहित कैसे प्रस्तुत कर सकता हूं?

उत्तर

73

आप हमेशा उन अक्षों को छुपा सकते हैं जिनकी आपको आवश्यकता नहीं है। निम्न चित्र में

import matplotlib.pyplot as plt 

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

plt.show() 

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

enter image description here

वैकल्पिक रूप से, एक के लिए सवाल Hiding axis text in matplotlib plots को स्वीकार कर लिया जवाब देखने अक्षों को रखने का तरीका लेकिन सभी अक्ष सजावट छुपाएं (जैसे टिक अंक और लेबल)।

+0

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

+0

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

+1

दूसरे विचार पर - इतना बेहतर फिट, मैंने स्विच किया .... – mishaF

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") 
+0

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

+0

@ मिशाफ: आप इस दृष्टिकोण का उपयोग करके subplots_adjust() कर सकते हैं। मेरा संपादन देखें। – moooeeeep

+0

यकीन है कि पर्याप्त - यह ठीक काम करता है! धन्यवाद टन !! – mishaF

13

अधिक बेहतर subplot interface को मैटलप्लिब में जोड़ा गया है क्योंकि इस सवाल से पहले पूछा गया था। यहां आप अतिरिक्त छिपाने के बिना आपको आवश्यक सबप्लॉट्स बना सकते हैं। इसके अतिरिक्त, उप-स्थान अतिरिक्त पंक्तियों या स्तंभों का विस्तार कर सकते हैं।

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

enter image description here

+0

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

0

यह भी एक subplot Axes.set_visible() पद्धति का उपयोग करके छिपाने के लिए संभव है।

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) 
संबंधित मुद्दे