2016-01-21 12 views
12

मैं एक आंकड़ा है कि एक 2x2 ग्रिड, जहां प्रत्येक वृत्त का चतुर्थ भाग में 2 खड़ी खड़ी subplots (अर्थात एक 2x1 ग्रिड) कर रहे हैं के होते हैं बनाने के लिए कोशिश कर रहा हूँ। मुझे यह पता लगाना प्रतीत नहीं होता कि यह कैसे हासिल किया जाए, हालांकि।Matplotlib - सबप्लॉट में सबप्लॉट जोड़ना?

मैंने जो निकटतम प्राप्त किया है वह ग्रिडस्पेक और कुछ बदसूरत कोड (नीचे देखें) का उपयोग कर रहा है, लेकिन क्योंकि gridspec.update(hspace=X) सभी सबप्लॉट्स के लिए अंतर को बदलता है, मैं अभी भी नहीं हूं जहां मैं बनना चाहता हूं।

आदर्श रूप से जो मैं चाहता हूं, उदाहरण के लिए नीचे दी गई तस्वीर का उपयोग करके, प्रत्येक चतुर्भुज के भीतर उपखंडों के बीच अंतर को कम करें, जबकि ऊपर और नीचे चतुर्भुज (यानी 1-3 और 2-4 के बीच लंबवत अंतर को बढ़ाते हुए))।

वहाँ (के साथ या gridspec का उपयोग किए बिना) यह करने के लिए कोई तरीका है? क्या मैं मूल रूप से कल्पना की उप subplot ग्रिड से प्रत्येक (यानी प्रत्येक 2x1 ग्रिड) पैदा करने और उन्हें subplots के बड़े 2x2 ग्रिड में डालने है, लेकिन मैं समझ नहीं किया है एक subplot के लिए एक subplot जोड़ने के बारे में है, अगर वहाँ भी है एक रास्ता

enter image description here

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 
plt.figure(figsize=(10, 8)) 
gs = gridspec.GridSpec(4,2) 
gs.update(hspace=0.4) 
for i in range(2): 
    for j in range(4): 
     ax = plt.subplot(gs[j,i]) 
     ax.spines['top'].set_visible(False) 
     ax.spines['right'].set_visible(False) 
     plt.tick_params(which='both', top='off', right='off') 
     if j % 2 == 0: 
      ax.set_title(str(i+j+1)) 
      ax.plot([1,2,3], [1,2,3]) 
      ax.spines['bottom'].set_visible(False) 
      ax.get_xaxis().set_visible(False) 
     else: 
      ax.plot([1,2,3], [3,2,1]) 

उत्तर

18

आप nest your GridSpec using SubplotSpec कर सकते हैं। बाहरी ग्रिड 2 x 2 होगा और आंतरिक ग्रिड 2 x 1 होगा। निम्नलिखित कोड आपको मूलभूत विचार देना चाहिए।

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 

fig = plt.figure(figsize=(10, 8)) 
outer = gridspec.GridSpec(2, 2, wspace=0.2, hspace=0.2) 

for i in range(4): 
    inner = gridspec.GridSpecFromSubplotSpec(2, 1, 
        subplot_spec=outer[i], wspace=0.1, hspace=0.1) 

    for j in range(2): 
     ax = plt.Subplot(fig, inner[j]) 
     t = ax.text(0.5,0.5, 'outer=%d, inner=%d' % (i,j)) 
     t.set_ha('center') 
     ax.set_xticks([]) 
     ax.set_yticks([]) 
     fig.add_subplot(ax) 

fig.show() 

enter image description here

+0

सही, धन्यवाद :) – user3014097

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