मैं matplotlib में कई सबप्लॉट कैसे प्राप्त कर सकता हूं?


156

मैं थोड़ा भ्रमित हूँ कि यह कोड कैसे काम करता है:

fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()

इस मामले में अंजीर, कुल्हाड़ी कैसे काम करती है? यह क्या करता है?

इसके अलावा यह काम क्यों नहीं किया जाएगा:

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

1
Matplotlib 2.1 के रूप में दूसरा कोड काम करता है
फर्मी विरोधाभास

जवाबों:


210

इसे करने के कई तरीके हैं। यह subplotsविधि उन सबप्लॉट्स के साथ आंकड़ा बनाती है जो तब axसरणी में संग्रहीत होते हैं । उदाहरण के लिए:

import matplotlib.pyplot as plt

x = range(10)
y = range(10)

fig, ax = plt.subplots(nrows=2, ncols=2)

for row in ax:
    for col in row:
        col.plot(x, y)

plt.show()

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

हालाँकि, कुछ इस तरह से भी काम करेगा, यह इतना "साफ" नहीं है जब से आप सबप्लॉट के साथ एक आंकड़ा बना रहे हैं और फिर उनमें से शीर्ष पर जोड़ें:

fig = plt.figure()

plt.subplot(2, 2, 1)
plt.plot(x, y)

plt.subplot(2, 2, 2)
plt.plot(x, y)

plt.subplot(2, 2, 3)
plt.plot(x, y)

plt.subplot(2, 2, 4)
plt.plot(x, y)

plt.show()

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


4
इसके बजाय plot(x, y)मेरे पास एक उपयोगकर्ता परिभाषित फ़ंक्शन से मेरा प्लॉट है, जो नेटवर्कएक्स के साथ एक ग्राफ बनाता है। इसे कैसे उपयोग करे?
सिगुर

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

3
आप से एक में छोरों के लिए दो कम कर सकते हैं axn = ax.flatten()और फिर for axes in axn: axes.plot(x,y)
wander95

@ wander95 धन्यवाद कि यह जवाब आपके लिए col = 1 या row = 1 का काम नहीं करता है
गुलज़ार

48
import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()

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


1
मुझे जो मिलता axहै, वह मिलता है, लेकिन जो नहीं है fig। वे क्या हैं?
लीवो

3
कुल्हाड़ी वास्तव में एक संख्यात्मक सरणी है। अंजीर वह matplotlib.figure.Figureवर्ग है जिसके माध्यम से आप प्लॉट किए गए आंकड़े में बहुत अधिक हेरफेर कर सकते हैं। उदाहरण के लिए, आप विशिष्ट सबप्लॉट में कलरबार जोड़ सकते हैं, आप सभी सबप्लॉट्स के पीछे पृष्ठभूमि का रंग बदल सकते हैं। आप इन सबप्लॉट्स के लेआउट को संशोधित कर सकते हैं या उनमें एक नया छोटा अक्ष जोड़ सकते हैं। अधिमानतः आप सभी सबप्लॉट्स के लिए एक एकल मुख्य शीर्षक चाहते हैं जो fig.suptitle(title)विधि के माध्यम से प्राप्त किया जा सकता है । अंत में एक बार जब आप भूखंड से खुश होते हैं, तो आप इसे fig.savefigविधि का उपयोग करके बचा सकते हैं । @ लिवो
खलील अल हूटी

21
  • आप सबप्लॉट कॉल में कुल्हाड़ियों को अनपैक भी कर सकते हैं

  • और सेट करें कि क्या आप सबप्लॉट्स के बीच एक्स और वाई एक्सिस को साझा करना चाहते हैं

ऐशे ही:

import matplotlib.pyplot as plt
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
ax1.plot(range(10), 'r')
ax2.plot(range(10), 'b')
ax3.plot(range(10), 'g')
ax4.plot(range(10), 'k')
plt.show()

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


14

आपको इस तथ्य में दिलचस्पी हो सकती है कि matplotlib संस्करण 2.1 के रूप में सवाल से दूसरा कोड भी ठीक काम करता है।

से परिवर्तन लॉग :

चित्र वर्ग में अब सबप्लॉट विधि है। चित्रा वर्ग में अब एक सबप्लॉट () विधि है जो pyplot.subplots () के समान व्यवहार करती है, लेकिन एक मौजूदा आकृति पर।

उदाहरण:

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

plt.show()

मुझे मिलता है: एट्रीब्यूट ट्रैसरबैक (सबसे हालिया कॉल अंतिम) <ipython-input-168-ed25aa5255fa> में <मॉड्यूल> (2) 2 अंजीर = plt.figure () ----> 4 अक्षीय = अंजीर = nub = 2 , ncols = 2) गुण: 'चित्र' वस्तु का कोई गुण 'सबप्लॉट' नहीं है
लूडो श्मिट

1
जवाब @LudoSchmidt कहते हैं, "matplotlib संस्करण 2.1 के रूप में ..."
ImportanceOfBeingErnest

11

प्रलेखन पढ़ें: matplotlib.pyplot.subplots

pyplot.subplots()एक टपल लौटाता है fig, axजो संकेतन का उपयोग करते हुए दो चर में बंद होता है

fig, axes = plt.subplots(nrows=2, ncols=2)

कोड

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

काम नहीं करता है, क्योंकि subplots()में एक समारोह है pyplotवस्तु का सदस्य नहीं Figure

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.