2014-04-17 11 views
6

का उपयोग करते समय गलत रंग पट्टी पोजिशनिंग मैं नौ सबप्लॉट्स वाली एक आकृति बनाना चाहता हूं। मैं वास्तव में इस तथ्य से नफरत करता हूं कि मुझे ax9 को ax9 को अलग से बनाने की आवश्यकता है इसलिए मैंने ऐसा करने के लिए लूप बनाया है। हालांकि, जब मैं एक कलरबार शामिल करना चाहता हूं, तो कलरबार को अंतिम उप-स्थान के दाएं स्थान पर रखा जाता है। यह भी निम्न चित्र में दर्शाया गया है:सबप्लॉट्स (matplotlib)

enter image description here

गलत क्या हो रहा है और मैं इसे ठीक कर सकते हैं?

छवि निम्न कोड के साथ उत्पन्न हुआ है:

import numpy 
import layout 
import matplotlib.pylab as plt 

data = numpy.random.random((10, 10)) 

test = ["ax1", "ax2", "ax3", "ax4", "ax5", "ax6", "ax7", "ax8", "ax9"] 

fig = plt.figure(1) 

for idx in range(len(test)): 
    vars()[test[idx]] = fig.add_subplot(3, 3, (idx + 1)) 

im = ax1.imshow(data) 
plt.colorbar(im) 

im2 = ax3.imshow(data) 
plt.colorbar(im2) 

plt.show() 

उत्तर

3

मैं अपने सवाल का जवाब मिल गया सही colorbar बनाम subplot रिक्ति हो जाती है। ध्यान दें कि यदि सबप्लॉट और कलरबार के बीच की दूरी कोई फर्क नहीं पड़ता है, तो मौली का जवाब सही है।

import numpy 
import layout 
import matplotlib.pylab as plt 
from mpl_toolkits.axes_grid1 import make_axes_locatable 

data = numpy.random.random((10, 10)) 

test = ["ax1", "ax2", "ax3", "ax4", "ax5", "ax6", "ax7", "ax8", "ax9"] 

fig = plt.figure(1) 

for idx in range(len(test)): 
    vars()[test[idx]] = fig.add_subplot(3, 3, (idx + 1)) 
    divider = make_axes_locatable(vars()[test[idx]]) 
    vars()["c" + test[idx]] = divider.append_axes("right", size = "5%", pad = 0.05) 


im1 = ax1.imshow(data) 
plt.colorbar(im1, cax = cax1) 

im2 = ax2.imshow(data) 
plt.colorbar(im2, cax = cax2) 

im3 = ax3.imshow(data) 
plt.colorbar(im3, cax = cax3) 

im4 = ax4.imshow(data) 
plt.colorbar(im4, cax = cax4) 

im5 = ax5.imshow(data) 
plt.colorbar(im5, cax = cax5) 

im6 = ax6.imshow(data) 
plt.colorbar(im6, cax = cax6) 

im7 = ax7.imshow(data) 
plt.colorbar(im7, cax = cax7) 

im8 = ax8.imshow(data) 
plt.colorbar(im8, cax = cax8) 

im9 = ax9.imshow(data) 
plt.colorbar(im9, cax = cax9) 

plt.show() 

इस परिणाम में:

enter image description here

10

colorbar एक तर्क ax लेता है "माता-पिता कुल्हाड़ियों वस्तु (रों) जिसमें से एक नया colorbar कुल्हाड़ियों के लिए जगह चोरी हो जाएगा।" आपके कोड में आप अक्षरों के बगल में कलर बार जोड़ने के लिए ऐसा कुछ कर सकते हैं:

im = ax1.imshow(data) 
plt.colorbar(im, ax = ax1) 
+0

यह मुझे मिला समाधान से थोड़ा अधिक सुरुचिपूर्ण है। हालांकि, सबप्लॉट और कलरबार के बीच की दूरी अपेक्षाकृत बड़ी है। कोई विचार? –

+0

plt.tight_layout() – Molly

0

दोस्त का जवाब बहुत अच्छा है। हालांकि मैं इसका उपयोग करके कॉपी-पेस्ट से बचना पसंद करूंगा:

import numpy 
import matplotlib.pylab as plt 
from mpl_toolkits.axes_grid1 import make_axes_locatable 

data = numpy.random.random((10, 10)) 

test = ["ax1", "ax2", "ax3", "ax4", "ax5", "ax6", "ax7", "ax8", "ax9"] 

fig = plt.figure(1) 

for idx in range(len(test)): 
    vars()[test[idx]] = fig.add_subplot(3, 3, (idx + 1)) 
    divider = make_axes_locatable(vars()[test[idx]]) 
    vars()["c" + test[idx]] = divider.append_axes("right", size = "5%", pad = 0.05) 

    vars()["im" + str(idx)] = vars()[test[idx]].imshow(data) 
    plt.colorbar(vars()["im" + str(idx)], cax = vars()["c" + test[idx]]) 

plt.show() 

परिणाम वही है।

+0

आज़माएं प्लॉट्स की दी गई संख्या के लिए केवल टेस्ट सूची बनाकर प्लॉट कस्टम की संख्या बनाना संभव है। –

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