Matplotlib 'होम', 'बैक' या 'फॉरवर्ड' बटन ईवेंट प्रदान नहीं करता है।
कॉलबैक जोड़ने के लिए जिसे 'होम', 'बैक' या 'फॉरवर्ड' बटन इवेंट के साथ बुलाया जाएगा, एक आम दृष्टिकोण मैटलप्लिब बैकएंड को उप-वर्ग करना है।
लेकिन मैं इस दृष्टिकोण के पक्ष में नहीं हूं। मुझे लगता है कि इसमें दो विपक्ष हैं:
- यदि आप विभिन्न बैकएंड का उपयोग करना चाहते हैं, तो आपको उनमें से प्रत्येक को उप-वर्ग करना होगा।
- matplotlib के बाहर अपना खुद का बैकएंड तैनात करना मामूली नहीं है। आपका बैकएंड एक मॉड्यूल होना चाहिए जो PythonPATH में होना चाहिए।
के बाद से matplotlib द्वारा प्रदान की बैकेंड में से कोई भी ओवरराइड करता है NavigationToolbar2
के home
, back
और forward
तरीकों।मैं अधिक संक्षिप्त बंदर-पैच दृष्टिकोण पसंद करता हूं।
उदाहरण के लिए, आप अपनी खुद की विधि से NavigationToolbar2
के home
को प्रतिस्थापित कर सकते हैं।
import matplotlib.pyplot as plt
from matplotlib.backend_bases import NavigationToolbar2
home = NavigationToolbar2.home
def new_home(self, *args, **kwargs):
print 'new home'
home(self, *args, **kwargs)
NavigationToolbar2.home = new_home
fig = plt.figure()
plt.text(0.35, 0.5, 'Hello world!', dict(size=30))
plt.show()
हम भी नकल matplotlib के mpl_connect
शैली कर सकते हैं।
import matplotlib.pyplot as plt
from matplotlib.backend_bases import NavigationToolbar2, Event
home = NavigationToolbar2.home
def new_home(self, *args, **kwargs):
s = 'home_event'
event = Event(s, self)
event.foo = 100
self.canvas.callbacks.process(s, event)
home(self, *args, **kwargs)
NavigationToolbar2.home = new_home
def handle_home(evt):
print 'new home'
print evt.foo
fig = plt.figure()
fig.canvas.mpl_connect('home_event', handle_home)
plt.text(0.35, 0.5, 'Hello world!', dict(size=30))
plt.show()
मुझे लगता है कि एक उत्तर स्वीकार करने से बकाया पुरस्कार नहीं मिलता है - थोड़ा गैर-सहज ज्ञान युक्त; खुशी है कि मैंने एक घंटे के अतिरिक्त रहने के लिए देखा, उम्मीद है कि इसे समझ गया है। सभी उच्च गुणवत्ता वाले उत्तरों के लिए बहुत धन्यवाद – bph