Matplotlib का उपयोग करके दो आंकड़े कैसे दिखाएं?


81

मुझे एक ही समय में दो आंकड़े आरेखित करते समय कुछ परेशानी होती है, एक ही प्लॉट में नहीं दिखाया गया है। लेकिन प्रलेखन के अनुसार, मैंने कोड लिखा था और केवल आंकड़ा एक दिखाता है। मुझे लगता है कि शायद मैं कुछ महत्वपूर्ण खो दिया है। क्या कोई मुझे पता लगाने में मदद कर सकता है? धन्यवाद। (कोड में प्रयुक्त * tlist_first * डेटा की एक सूची है।)

plt.figure(1)
plt.hist(tlist_first, bins=2000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')
plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')

plt.axvline(x = 30, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '30 min')
plt.axvline(x = 60, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 hour')
plt.legend()
plt.xlim(0,120)
plt.ylim(0,1) 
plt.show()
plt.close() ### not working either with this line or without it

plt.figure(2)
plt.hist(tlist_first, bins=2000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')

plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')

plt.axvline(x = 240, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '30 min')
plt.axvline(x = 1440, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 hour')
plt.legend(loc= 4)
plt.xlim(0,2640)
plt.ylim(0,1)
plt.show()

जवाबों:


91

वैकल्पिक रूप से plt.show()स्क्रिप्ट के अंत में कॉल करने पर, आप प्रत्येक आकृति को अलग से नियंत्रित कर सकते हैं:

f = plt.figure(1)
plt.hist........
............
f.show()

g = plt.figure(2)
plt.hist(........
................
g.show()

raw_input()

इस मामले में आपको raw_inputआंकड़े जिंदा रखने के लिए फोन करना चाहिए । इस तरह आप डायनामिकली चुन सकते हैं कि आपको कौन से आंकड़े दिखाना है

नोट: पायथन 3 में raw_input()नाम बदल दिया गया थाinput()


1
दुर्भाग्य से python3.6 और नवीनतम matplotlib के साथ, कई fig.show () को कॉल करने से कुछ भी नहीं लगता है। मुझे अभी भी plt.show () को अंत में कॉल करना है।
काक्यो

1
@kakyo - Matplotlib के 3.6.6साथ अजगर का उपयोग करना 2.2.2(जो आपके लेखन के समय नवीनतम रिलीज़ था); ऊपर समाधान मेरे लिए काम करता है। आपकी समस्या कुछ और से आनी चाहिए, उदाहरण के लिए इस्तेमाल किया बैकएंड । चल रहा है matplotlib.get_backend(), मुझे मिलता है'Qt5Agg'
n1k31t4

मुझे भी figure=gदूसरे में जोड़ना था plt.hist()
माइकल

क्या मुझे अन्य पैकेजों की आवश्यकता है? NameError: name 'raw_input' is not defined
zheyuanwang

1
@ ज़ेह्यूवांग यदि आप अजगर 3 का उपयोग कर रहे हैं तो आपको इसका उपयोग करना चाहिए input()। पोस्ट में अंतिम नोट देखें
joaquin

61

plt.show()सभी भूखंडों को बनाने के बाद आपको केवल अंत में कॉल करना चाहिए ।


8
मुझे यह काफी कष्टप्रद लगा, क्योंकि अगर मैंने show()एक बार फोन किया, तो मैं इसे फिर से कॉल नहीं कर सकता, अगर मैं फिर से प्लॉट दिखाना चाहता हूं, तो मुझे इसे फिर से भरना होगा?
अलकोट

23

मुझे भी बिल्कुल यही समस्या है।


किया:

f1 = plt.figure(1)

# code for figure 1

# don't write 'plt.show()' here


f2 = plt.figure(2)

# code for figure 2

plt.show()


अंतिम आंकड़े के बाद केवल एक बार 'plt.show ()' लिखें। मेरे लिए काम किया।



यह इसे एक ही विंडो में दिखाता है, न कि 2 अलग-अलग विंडो में। हालांकि ओपी के सवाल का जवाब दिया। अपवोट इसलिए।
माइक डे क्लार्क

लेकिन अगर आप एक अलग भूखंड चाहते हैं तो क्या होगा? यह एक ही भूखंड पर प्लॉट किया गया था
Nhoj_Gonk 12

8

वैकल्पिक रूप से, मैं सुझाव दूंगा कि शुरू में इंटरेक्टिव और बहुत आखिरी प्लॉट पर, इसे बंद कर दें। सभी दिखाई देंगे, लेकिन वे गायब नहीं होंगे क्योंकि आपका कार्यक्रम तब तक रहेगा जब तक आप आंकड़े बंद नहीं करते।

import matplotlib.pyplot as plt
from matplotlib import interactive

plt.figure(1)
... code to make figure (1)

interactive(True)
plt.show()

plt.figure(2)
... code to make figure (2)

plt.show()

plt.figure(3)
... code to make figure (3)

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