मैं माटप्लोटलिब को दूसरा (नया) प्लॉट बनाने के लिए कैसे कहूं, बाद में पुराने पर साजिश रचूं?


147

मैं डेटा प्लॉट करना चाहता हूं, फिर एक नया आंकड़ा बनाएं और डेटा 2 प्लॉट करें, और अंत में मूल प्लॉट और प्लॉट डेटा 3 पर वापस आएं, इस तरह से टाइप करें:

import numpy as np
import matplotlib as plt

x = arange(5)
y = np.exp(5)
plt.figure()
plt.plot(x, y)

z = np.sin(x)
plt.figure()
plt.plot(x, z)

w = np.cos(x)
plt.figure("""first figure""") # Here's the part I need
plt.plot(x, w)

FYI करें मैं कैसे बताऊँ matlotlib कि मैं एक साजिश के साथ किया जाता है? कुछ ऐसा ही करता है, लेकिन काफी नहीं! यह मुझे उस मूल कथानक तक पहुंचने की अनुमति नहीं देता है।

जवाबों:


152

यदि आप अपने आप को इस तरह से नियमित रूप से चीजें करते हुए पाते हैं, तो यह ऑब्जेक्ट-उन्मुख इंटरफ़ेस की जांच करने के लायक हो सकता है। आपके मामले में:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(5)
y = np.exp(x)
fig1, ax1 = plt.subplots()
ax1.plot(x, y)
ax1.set_title("Axis 1 title")
ax1.set_xlabel("X-label for axis 1")

z = np.sin(x)
fig2, (ax2, ax3) = plt.subplots(nrows=2, ncols=1) # two axes on figure
ax2.plot(x, z)
ax3.plot(x, -z)

w = np.cos(x)
ax1.plot(x, w) # can continue plotting on the first axis

यह थोड़ी अधिक क्रिया है, लेकिन यह बहुत स्पष्ट और आसान है, खासकर कई सबप्लॉट्स के साथ प्रत्येक के कई आंकड़ों के साथ।


2
मैं ऑब्जेक्ट ओरिएंटेड दृष्टिकोण को पसंद करता हूं जब मैं अनुमान लगाता हूं कि कई आंकड़े हैं, तो संख्याओं के बजाय नामों का उपयोग करके उन पर नज़र रखना आसान होगा। धन्यवाद!
पीटर डी

1
लेकिन इस दृष्टिकोण के साथ कोई लेबल और अक्ष सीमा कैसे बदल सकता है। अगर मैं उपयोग ax1.ylabelकरता हूं तो वह कहता है कि यह नहीं मिला है। उसी के साथ fig1.ylabel...
जॉर्ज डैटेरिस

3
@GeorgeDatseris वाक्य-विन्यास थोड़ा अलग है। यह है ax1.set_xlabel("your x label"), ax1.set_ylabel("your y label")और ax1.set_title("your title")
सिमोनब

1
आपने 111 का उपयोग क्यों किया?
यश सोढ़ा

2
@yashSodha - यह सबप्लाट्स (पंक्तियों, कॉल, इंडेक्स) की संख्या का एक मैटलैब-शैली विनिर्देश है। लेकिन इसका उपयोग करना अब बहुत आसान है plt.subplots(nrows, ncols)। उदाहरण को अद्यतन किया है।
सिमोनब

120

जब आप कॉल करते हैं figure, बस प्लॉट को नंबर दें।

x = arange(5)
y = np.exp(5)
plt.figure(0)
plt.plot(x, y)

z = np.sin(x)
plt.figure(1)
plt.plot(x, z)

w = np.cos(x)
plt.figure(0) # Here's the part I need
plt.plot(x, w)

संपादित करें: ध्यान दें कि आप अपने इच्छित भूखंडों को संख्या दे सकते हैं (यहाँ से शुरू करते हुए 0), लेकिन यदि आप एक नया नंबर बनाते समय किसी संख्या के साथ आंकड़ा प्रदान नहीं करते हैं, तो स्वचालित अंकन 1("मतलाब शैली" के अनुसार शुरू होगा) डॉक्स के लिए)।


3
यह matplotlib के इंटरैक्टिव मोड में काम करता प्रतीत होता है, जबकि आंकड़ा () ... add_subplot () विधि नहीं है। धन्यवाद!
22

@SebMa कृपया इसे समझे बिना कोड को न बदलें। यह उत्तर विशेष रूप से एक संख्या को पास करने के बारे में था figure, जिसे आपने हटा दिया था। आपके द्वारा बदली गई अन्य चीजों को मूल पोस्ट से कॉपी किया गया था और मेरे उत्तर में गलतियां नहीं थीं।
15

@agf हाय, मैंने 1अंदर को हटा दिया plt.figure(1)क्योंकि मुझे लगा कि संख्या में वृद्धि हुई है और इसलिए आवश्यक नहीं है। माफ़ करना।
सेबमा

18

हालाँकि, नंबरिंग शुरू होती है 1, इसलिए:

x = arange(5)
y = np.exp(5)
plt.figure(1)
plt.plot(x, y)

z = np.sin(x)
plt.figure(2)
plt.plot(x, z)

w = np.cos(x)
plt.figure(1) # Here's the part I need, but numbering starts at 1!
plt.plot(x, w)

इसके अलावा, यदि आपके पास किसी आंकड़े पर कई कुल्हाड़ियाँ हैं, जैसे कि सबप्लॉट्स, तो उस अक्ष का उपयोग करें axes(h)जहां hउस अक्ष पर ध्यान केंद्रित करने के लिए वांछित अक्षों ऑब्जेक्ट का हैंडल है।

(अभी तक टिप्पणी विशेषाधिकार नहीं है, नए उत्तर के लिए क्षमा करें!)


10
0काम करता है, स्वत: नंबरिंग बस पर शुरू 1, अगर आप इसे एक नंबर बिल्कुल नहीं देते हैं।
२:११

0

कुछ संघर्ष के बाद मैंने पाया कि एक ऐसा फंक्शन बना रहा है, जो दिए गए डेटा (अलग-अलग ऑर्डर = अलग-अलग आकृतियों) में दिए गए डेटा से बॉक्सप्लेट बनाने के लिए डेटा के रूप में मैट्रिक्स, फ़ाइल नाम और ऑर्डर प्राप्त करता है और दिए गए file_name के तहत इसे सेव करता है।

def plotFigure(data_plot,file_name,order):
    fig = plt.figure(order, figsize=(9, 6))
    ax = fig.add_subplot(111)
    bp = ax.boxplot(data_plot)
    fig.savefig(file_name, bbox_inches='tight')
    plt.close()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.