दिलचस्प पोस्ट
सी में स्ट्रिंग को बदलने के लिए फ़ंक्शन क्या है? जावा में ट्रिटी टर्नरी ऑपरेटर – ऑटोबॉक्सिंग जावा क्रम में स्थिर / इंस्टेंस प्रारंभिक ब्लॉक किस क्रम में? क्या आप HTML5 विशेषताओं का उद्धरण करते हैं? एक बार में कई अपवाद पकड़ो? शिफ्ट ऑपरेटर (<<, >>) क्या सी में गणित या तार्किक हैं? sudo in php exec () मैं NSManagedObject स्विफ्ट एक्सटेंशन में प्रबंधित ऑब्जेक्ट सबक्लेसेस के उदाहरण कैसे बना सकता हूं? कितने सॉकेट कनेक्शन संभव हैं? ऑब्जेक्ट सहेजना (डेटा दृढ़ता) सी # – विंडोज 64 बिट पर प्रोग्राम फाइल (एक्स 86) कैसे प्राप्त करें I टेदरारेआ ऑटो ऊंचाई जावा स्ट्रिंग्स: "स्ट्रिंग s = नया स्ट्रिंग (" मूर्ख ");" (क्यों) एक uninitialized चर अपरिभाषित व्यवहार का उपयोग कर रहा है? आधुनिक पायथन में कस्टम अपवाद घोषित करने का उचित तरीका है?

Matplotlib में एक बिंदु पर मँडरा करते समय लेबल बनाने के लिए संभव है?

मैं स्कैटर प्लॉट बनाने के लिए मैप्लोटलिब का उपयोग कर रहा हूं। स्कैटर प्लॉट पर प्रत्येक बिंदु एक नामित ऑब्जेक्ट के साथ जुड़ा हुआ है। मैं किसी ऑब्जेक्ट का नाम देखने में सक्षम होना चाहूंगा जब मैं अपने कर्सर को उस ऑब्जेक्ट से जुड़े स्कैटर प्लॉट पर बिन्दु पर ले जाएगा। विशेष रूप से, आउटलाइयर के बिंदुओं के नामों को शीघ्रता से देखने में सक्षम होना अच्छा होगा यहां खोजते वक्त मैं सबसे निकटतम चीज ढूंढने में सक्षम हूं, जो कि एनोटेट कमांड है, लेकिन यह साजिश पर एक निश्चित लेबल बनाने के लिए प्रतीत होता है। दुर्भाग्यवश, मेरे पास जितने अंक हैं, उतना स्कैटर प्लॉट अपठनीय होगा यदि मैं प्रत्येक बिंदु को लेबल करता हूं क्या कोई उस लेबल्स को बनाने का एक तरीका जानता है जो केवल तब दिखाई देता है जब उस बिंदु के आसपास कर्सर खिसकाता है?

वेब के समाधान से एकत्रित समाधान "Matplotlib में एक बिंदु पर मँडरा करते समय लेबल बनाने के लिए संभव है?"

ऐसा लगता है कि अन्य उत्तरों में से कोई भी वास्तव में सवाल का जवाब नहीं देता। तो यहां एक ऐसा कोड है जो स्कैटर का उपयोग करता है और स्कैटर पॉइंट पर होवर करने पर एक एनोटेशन दिखाता है।

import matplotlib.pyplot as plt import numpy as np; np.random.seed(1) x = np.random.rand(15) y = np.random.rand(15) names = np.array(list("ABCDEFGHIJKLMNO")) c = np.random.randint(1,5,size=15) norm = plt.Normalize(1,4) cmap = plt.cm.RdYlGn fig,ax = plt.subplots() sc = plt.scatter(x,y,c=c, s=100, cmap=cmap, norm=norm) annot = ax.annotate("", xy=(0,0), xytext=(20,20),textcoords="offset points", bbox=dict(boxstyle="round", fc="w"), arrowprops=dict(arrowstyle="->")) annot.set_visible(False) def update_annot(ind): pos = sc.get_offsets()[ind["ind"][0]] annot.xy = pos text = "{}, {}".format(" ".join(list(map(str,ind["ind"]))), " ".join([names[n] for n in ind["ind"]])) annot.set_text(text) annot.get_bbox_patch().set_facecolor(cmap(norm(c[ind["ind"][0]]))) annot.get_bbox_patch().set_alpha(0.4) def hover(event): vis = annot.get_visible() if event.inaxes == ax: cont, ind = sc.contains(event) if cont: update_annot(ind) annot.set_visible(True) fig.canvas.draw_idle() else: if vis: annot.set_visible(False) fig.canvas.draw_idle() fig.canvas.mpl_connect("motion_notify_event", hover) plt.show() 

यहां छवि विवरण दर्ज करें

क्योंकि लोगों को अचानक भी एक स्कैटर के बजाय एक लाइन plot लिए इस समाधान का उपयोग करना है, क्योंकि plot लिए निम्न समाधान होगा (जो थोड़ा अलग तरीके से काम करता है)।

 import matplotlib.pyplot as plt import numpy as np; np.random.seed(1) x = np.sort(np.random.rand(15)) y = np.sort(np.random.rand(15)) names = np.array(list("ABCDEFGHIJKLMNO")) norm = plt.Normalize(1,4) cmap = plt.cm.RdYlGn fig,ax = plt.subplots() line, = plt.plot(x,y, marker="o") annot = ax.annotate("", xy=(0,0), xytext=(-20,20),textcoords="offset points", bbox=dict(boxstyle="round", fc="w"), arrowprops=dict(arrowstyle="->")) annot.set_visible(False) def update_annot(ind): x,y = line.get_data() annot.xy = (x[ind["ind"][0]], y[ind["ind"][0]]) text = "{}, {}".format(" ".join(list(map(str,ind["ind"]))), " ".join([names[n] for n in ind["ind"]])) annot.set_text(text) annot.get_bbox_patch().set_alpha(0.4) def hover(event): vis = annot.get_visible() if event.inaxes == ax: cont, ind = line.contains(event) if cont: update_annot(ind) annot.set_visible(True) fig.canvas.draw_idle() else: if vis: annot.set_visible(False) fig.canvas.draw_idle() fig.canvas.mpl_connect("motion_notify_event", hover) plt.show() 

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं यहां आने पर एक हुकूमत (एक क्लिक पर क्लिक न करें) की तलाश में रहता था

 import matplotlib.pyplot as plt fig = plt.figure() plot = fig.add_subplot(111) # create some curves for i in range(4): plot.plot( [i*1,i*2,i*3,i*4], gid=i) def on_plot_hover(event): for curve in plot.get_lines(): if curve.contains(event)[0]: print "over %s" % curve.get_gid() fig.canvas.mpl_connect('motion_notify_event', on_plot_hover) plt.show() 

http://matplotlib.sourceforge.net/examples/event_handling/pick_event_demo.html से :

 from matplotlib.pyplot import figure, show import numpy as npy from numpy.random import rand if 1: # picking on a scatter plot (matplotlib.collections.RegularPolyCollection) x, y, c, s = rand(4, 100) def onpick3(event): ind = event.ind print 'onpick3 scatter:', ind, npy.take(x, ind), npy.take(y, ind) fig = figure() ax1 = fig.add_subplot(111) col = ax1.scatter(x, y, 100*s, c, picker=True) #fig.savefig('pscoll.eps') fig.canvas.mpl_connect('pick_event', onpick3) show() 
  • यह नुस्खा डेटा बिंदु चुनने पर एक एनोटेशन खींचती है: http://scipy-cookbook.readthedocs.io/items/Matplotlib_Interactive_Plotting.html
  • यह नुस्खा टूलटिप खींचती है, लेकिन इसकी आवश्यकता है wxPython: matplotlib में पॉइंट और रेखा टूलटिप्स?

http://matplotlib.org/users/shell.html में दिए गए उदाहरण पर थोड़ा सा संपादित करें:

 import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.set_title('click on points') line, = ax.plot(np.random.rand(100), '-', picker=5) # 5 points tolerance def onpick(event): thisline = event.artist xdata = thisline.get_xdata() ydata = thisline.get_ydata() ind = event.ind print 'onpick points:', zip(xdata[ind], ydata[ind]) fig.canvas.mpl_connect('pick_event', onpick) plt.show() 

यह भूखंड एक सीधी रेखा की साजिश है, जैसा सोहाब कह रहा था

mpld3 मेरे लिए इसे हल करें संपादित करें (कोड जोड़):

 import matplotlib.pyplot as plt import numpy as np import mpld3 fig, ax = plt.subplots(subplot_kw=dict(axisbg='#EEEEEE')) N = 100 scatter = ax.scatter(np.random.normal(size=N), np.random.normal(size=N), c=np.random.random(size=N), s=1000 * np.random.random(size=N), alpha=0.3, cmap=plt.cm.jet) ax.grid(color='white', linestyle='solid') ax.set_title("Scatter Plot (with tooltips!)", size=20) labels = ['point {0}'.format(i + 1) for i in range(N)] tooltip = mpld3.plugins.PointLabelTooltip(scatter, labels=labels) mpld3.plugins.connect(fig, tooltip) mpld3.show() 

आप इस उदाहरण को देख सकते हैं