मैं जानना चाहता हूं कि बेसमेप प्लॉट में पॉपअप बॉक्स कैसे बनाएं। जब मैं अपने माउस को किसी स्थान पर घुमाता हूं, तो उसे पॉपअप बॉक्स को ट्रिगर करना चाहिए।Matplotlib basemap: पॉपअप बॉक्स
क्या यह संभव है?
मैं जानना चाहता हूं कि बेसमेप प्लॉट में पॉपअप बॉक्स कैसे बनाएं। जब मैं अपने माउस को किसी स्थान पर घुमाता हूं, तो उसे पॉपअप बॉक्स को ट्रिगर करना चाहिए।Matplotlib basemap: पॉपअप बॉक्स
क्या यह संभव है?
हां यह संभव है matplotlib के ईवेंट हैंडलिंग ढांचे के लिए धन्यवाद। मुझे पहले से लिखित उदाहरण नहीं मिल सका जो आप विशेष रूप से रुचि रखते हैं, इसलिए मैंने एक लिखा (जिसे मैं matplotlib स्रोत में शामिल करने के लिए आगे रखूंगा)।
मैं http://matplotlib.sourceforge.net/users/event_handling.html को अच्छी तरह से समझने के लिए पढ़ रहा हूं कि क्या हो रहा है। कृपया ध्यान दें कि यद्यपि यह सही समाधान की तरह लगता है "pick_event" माउस क्लिक के लिए है- माउस ओवर-इवेंट्स के लिए नहीं है और इस मामले में काम नहीं करता है।
मेरे कोड है, जो बहुत अच्छी तरह से एक चाहते चाहिए objectified किया जा सकता है, लगता है:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes()
points_with_annotation = []
for i in range(10):
point, = plt.plot(i, i, 'o', markersize=10)
annotation = ax.annotate("Mouseover point %s" % i,
xy=(i, i), xycoords='data',
xytext=(i + 1, i), textcoords='data',
horizontalalignment="left",
arrowprops=dict(arrowstyle="simple",
connectionstyle="arc3,rad=-0.2"),
bbox=dict(boxstyle="round", facecolor="w",
edgecolor="0.5", alpha=0.9)
)
# by default, disable the annotation visibility
annotation.set_visible(False)
points_with_annotation.append([point, annotation])
def on_move(event):
visibility_changed = False
for point, annotation in points_with_annotation:
should_be_visible = (point.contains(event)[0] == True)
if should_be_visible != annotation.get_visible():
visibility_changed = True
annotation.set_visible(should_be_visible)
if visibility_changed:
plt.draw()
on_move_id = fig.canvas.mpl_connect('motion_notify_event', on_move)
plt.show()
उम्मीद है कि सब कुछ काफी पठनीय होना चाहिए। कोड की एक उच्च स्तरीय अवलोकन जाता है:
आह सुंदर, आप कोड और विवरण के लिए @pelson धन्यवाद। तो इसका मतलब है कि साजिश पर किसी स्थान पर होवर करने के लिए कोई प्रत्यक्ष ईवेंट हैंडलर नहीं है। इसे परोक्ष रूप से किया जाना चाहिए। –
नहीं। आप 'on_move' फ़ंक्शन में माउस ईवेंट के एक्स और वाई निर्देशांक तक पहुंच सकते हैं। उस से आप कुछ भी कर सकते हैं। मेरे मामले में मैंने सभी कलाकारों को देखा है और पहचान की है कि किसी में माउस की स्थिति है, लेकिन आप एक्स और वाई के बाद एक एकल एनोटेशन इंस्टेंस की स्थिति को समान रूप से अपडेट कर सकते हैं। – pelson
हाँ आप उस बिंदु पर सही हैं, लेकिन मैं किसी विशेष कलाकार को "hover_event" जैसे किसी ईवेंट के साथ कॉलबैक पंजीकृत करने की तरह कुछ ढूंढ रहा था, जिसका मतलब है कि मेरा प्रत्यक्ष अर्थ –