From: butterw <bu...@gm...> - 2009-09-23 19:27:36
|
Hi, pickers work great to make matplotlib plots more interactive/general user friendly. On the subject of the legend_picker.py example, I was wondering if it was possible to combine both a legend picker and a line picker in the same plot. >From what I gather they will both use the same onpick event callback. So my question is : How do I discriminate between a pick on the legend from a pick on a line ? The event.artist is a line2D in both cases. John Hunter-4 wrote: > > On Mon, Aug 3, 2009 at 11:38 PM, Gökhan Sever<gok...@gm...> > wrote: >> Hello, >> >> I was wondering if it is possible to hide some data on figures using a >> say >> right click option to any of the legend entry and make it temporarily >> hidden/visible to better analyse the rest of the data? >> >> Check this screenshot for example: >> >> http://img25.imageshack.us/img25/9427/datahiding.png >> >> The red data clutters the rest of the figure, and I would like to be able >> to >> hide it temporarily so that I can investigate the other two relations >> more >> easily. >> >> Any ideas? or alternative solutions? > > It's a nice idea, and should be doable with the pick interface we have > for all mpl artists. Unfortunately, there were a few problems in the > legend implementation which blocked the pick events from hitting the > proxy lines they contained. I just made a few changes to mpl svn HEAD > to support this, and added a new example. > > examples/event_handling/legend_picking.py > > which I'll include below. JJ could you review the changes to legend.py? > > Instructions for checking out svn are at:: > > > http://matplotlib.sourceforge.net/faq/installing_faq.html#install-from-svn > > Here is the example: > > """ > Enable picking on the legend to toggle the legended line on and off > """ > import numpy as np > import matplotlib.pyplot as plt > > t = np.arange(0.0, 0.2, 0.1) > y1 = 2*np.sin(2*np.pi*t) > y2 = 4*np.sin(2*np.pi*2*t) > > fig = plt.figure() > ax = fig.add_subplot(111) > > line1, = ax.plot(t, y1, lw=2, color='red', label='1 hz') > line2, = ax.plot(t, y2, lw=2, color='blue', label='2 hz') > > leg = ax.legend(loc='upper left', fancybox=True, shadow=True) > leg.get_frame().set_alpha(0.4) > > > lines = [line1, line2] > lined = dict() > for legline, realine in zip(leg.get_lines(), lines): > legline.set_picker(5) # 5 pts tolerance > lined[legline] = realine > > def onpick(event): > legline = event.artist > realline = lined[legline] > vis = realline.get_visible() > realline.set_visible(not vis) > fig.canvas.draw() > > fig.canvas.mpl_connect('pick_event', onpick) > > plt.show() > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > -- View this message in context: http://www.nabble.com/Hiding-data-via-legend-tp24802219p25531267.html Sent from the matplotlib - users mailing list archive at Nabble.com. |