मेरे पास मेरे कोड में एक फ़ंक्शन है जो प्लॉट करने के लिए एक्सिस-इंस्टेंस लेता है। मैं डिफ़ॉल्ट को वर्तमान अक्ष के रूप में सेट करना चाहता हूं। यह निम्नलिखित कोड की ओर जाता है:

from matplotlib import pyplot as plt

def plotfunc(ax=plt.gca()):
    # Here I would usually plot some functions on ax
    return True

plt.figure()
plt.show()

मैं इस स्क्रिप्ट से जो उम्मीद करूंगा वह एक खाली आकृति दिख रही है। लेकिन मुझे जो मिलता है वह एक आंकड़ा और दूसरा खाली सबप्लॉट है, हालांकि मैं प्लॉटफंक को भी कॉल नहीं करता हूं। जब मैं कोड में "=plt.cga ()" भाग को हटाता हूं तो अतिरिक्त सबप्लॉट प्रकट नहीं होता है। क्या pltgca() को अन्य सबप्लॉट प्राप्त किए बिना प्लॉटफंक के लिए मानक अक्ष के रूप में सेट करने का कोई तरीका है?

मैं उबंटू 18.04.1 के तहत अजगर 3.6 का उपयोग कर रहा हूं।

1
Max H. 24 अक्टूबर 2018, 18:05

2 जवाब

सबसे बढ़िया उत्तर

पायथन में किसी फ़ंक्शन के लिए डिफ़ॉल्ट कीवर्ड तर्क फ़ंक्शन की परिभाषा के दौरान सेट किए जाते हैं (कॉल समय के विपरीत)। तो क्या होता है जब आप उस स्क्रिप्ट को चलाते हैं:

  1. आयात निष्पादित है
  2. plotfunc परिभाषित किया गया है -> plt.gca() निष्पादित किया गया है और वापसी मूल्य ax के डिफ़ॉल्ट मान के लिए बाध्य है
  3. plt.figure() निष्पादित हो गया है
  4. plt.show() निष्पादित किया गया है

भले ही फ़ंक्शन को कभी नहीं कहा जाता है, डिफ़ॉल्ट कीवर्ड तर्क सेट किया जाता है और एक संबंधित Axes (और आंकड़ा) बनाया जाता है। फिर plt.figure() स्पष्ट रूप से एक नया आंकड़ा बनाता है, दूसरा जिसे आप देखते हैं।

आपको एक प्रहरी मान को ax पर सेट करना चाहिए, जैसा कि ax=None में है, फिर फ़ंक्शन के अंदर if ax is None: ax = plt.gca() को ओवरराइड करें जो केवल फ़ंक्शन कॉल पर होता है।

0
Andras Deak 24 अक्टूबर 2018, 15:09

किसी फ़ंक्शन को कुल्हाड़ियों की आपूर्ति करने और "वर्तमान अक्ष" पर वापस आने की अनुमति देने का सामान्य तरीका होगा यदि कोई नहीं दिया गया है

def plotfunc(ax=None):
    ax = ax or plt.gca()
    # plot something to ax
    ax.plot(...)
0
ImportanceOfBeingErnest 24 अक्टूबर 2018, 15:28