2017-10-25 15 views
6

के समान तर्कों का उपयोग करके अक्ष जोड़ना, मैं दो अलग-अलग उप-स्थानों में डेटा प्लॉट करना चाहता हूं। साजिश के बाद, मैं पहले सबप्लॉट पर वापस जाना चाहता हूं और इसमें एक अतिरिक्त डेटासेट प्लॉट करना चाहता हूं। हालांकि, जब मैं इतना है कि मैं इस चेतावनी मिलती है:Matplotlib: पिछली अक्ष

MatplotlibDeprecationWarning: पिछले कुल्हाड़ियों के रूप में ही तर्कों का उपयोग एक कुल्हाड़ियों जोड़ा जा रहा है वर्तमान में पहले उदाहरण पुनः उपयोग कर लेता। भविष्य के संस्करण में, एक नया उदाहरण हमेशा बनाया और वापस कर दिया जाएगा। इस बीच, इस चेतावनी को दबाया जा सकता है, और भविष्य के व्यवहार को सुनिश्चित किया जाता है, प्रत्येक अक्ष उदाहरण के लिए एक अद्वितीय लेबल पास करके। warnings.warn (संदेश, mplDeprecation, stacklevel = 1)

मुझे लगता है कि पुन: पेश कर सकते हैं कोड का एक सरल टुकड़ा के साथ:

import matplotlib.pyplot as plt 
import numpy as np 

# Generate random data 
data = np.random.rand(100) 

# Plot in different subplots 
plt.figure() 
plt.subplot(1, 2, 1) 
plt.plot(data) 

plt.subplot(1, 2, 2) 
plt.plot(data) 

plt.subplot(1, 2, 1) # Warning occurs here 
plt.plot(data + 1) 

कैसे इस चेतावनी से बचने के लिए पर कोई भी विचार? मैं matplotlib 2.1.0 का उपयोग करता हूं। here

उत्तर

5

यह एक अच्छा उदाहरण है जो matplotlib के object oriented API का उपयोग करने का लाभ दिखाता है।

import numpy as np 
import matplotlib.pyplot as plt 

# Generate random data 
data = np.random.rand(100) 

# Plot in different subplots 
fig, (ax1, ax2) = plt.subplots(1, 2) 
ax1.plot(data) 

ax2.plot(data) 

ax1.plot(data+1) 

plt.show() 

नोट: यह चर नाम उदाहरण, एक लोअर केस अक्षर से शुरू करने के लिए और अधिक pythonic है data = ... बजाय Data = ... का उपयोग plt.subplot(1,2,1)बनाता वर्तमान आकृति में एक नया अक्ष PEP8

3

देखते हैं। बहिष्करण चेतावनी बता रही है कि भविष्य में रिलीज में, जब आप इसे दूसरी बार कॉल करते हैं, तो यह पहले बनाए गए धुरी को नहीं पकड़ पाएगा, बल्कि यह इसे ओवरराइट करेगा।

आप अक्ष के पहले उदाहरण के संदर्भ को एक चर को निर्दिष्ट करके सहेज सकते हैं।

plt.figure() 
# keep a reference to the first axis 
ax1 = plt.subplot(1,2,1) 
ax1.plot(Data) 

# and a reference to the second axis 
ax2 = plt.subplot(1,2,2) 
ax2.plot(Data) 

# reuse the first axis 
ax1.plot(Data+1) 
+0

शायद आप चेतावनी को गलत समझा, या पहली वाक्य स्पष्ट नहीं है। 'Plt.subplot (1,2,1)' * के लिए दूसरी कॉल * एक नई अक्ष नहीं बनाती है। इसके बजाय यह पहले से बनाए गए सबप्लॉट को सक्रिय करता है। * भविष्य में * एक नई अक्ष बनाई जाएगी। – ImportanceOfBeingErnest

+0

मुझे लगता है कि मेरा शब्द संदिग्ध था। मैं इसे स्पष्ट करने की कोशिश करूंगा। – James

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