Hi there:
I have an x-y plot and I want to draw a vertical marker (an x=c line) on the plot on a mouse click.
How should I approach it?
regards,
Soumyaroop
Hi there:
I have an x-y plot and I want to draw a vertical marker (an x=c line) on the plot on a mouse click.
How should I approach it?
regards,
Soumyaroop
Any pointers on this?
On Sat, Apr 30, 2011 at 12:34 AM, Soumyaroop Roy <roy.soumyaroop@…287…> wrote:
Hi there:
I have an x-y plot and I want to draw a vertical marker (an x=c line) on the plot on a mouse click.
How should I approach it?
regards,
Soumyaroop
You’ll want to use event handling to figure out where the user clicked, and then you have a couple of options: Axes.vlines(), or pylab.axvline(). It seems like pylab.axvline() will always span the entire y-axis by default, but with Axes.vlines() you need to specify the ymin/ymax. Maybe someone else knows of an argument to pass to Axes.vlines() that will always span the entire y-axis.
Here’s the code (assuming ‘ipython -pylab’):
========
fig = figure()
plot([1,2,3,4], [5,6,7,8])
def onclick(event):
“”“Draw a vertical line spanning the axes every time the user clicks inside them”“”
if event.inaxes: # make sure the click was within a set of axes
pylab.axvline(event.xdata, axes=event.inaxes, color=‘r’, linestyle=‘:’) # red dotted line
event.inaxes.figure.canvas.draw() # force a re-draw
cid = fig.canvas.mpl_connect(‘button_press_event’, onclick) # add the click handler
… interact with it
fig.canvas.mpl_disconnect(cid) # get rid of the click-handler
========
Docs:
Axes.vlines(): http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.vlines
pyplot.axvline(): http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.axvline
Event handling: http://matplotlib.sourceforge.net/users/event_handling.html
Example: http://matplotlib.sourceforge.net/examples/event_handling/data_browser.html
Justin
On Mon, May 2, 2011 at 10:08 AM, Soumyaroop Roy <roy.soumyaroop@…287…> wrote:
Any pointers on this?
On Sat, Apr 30, 2011 at 12:34 AM, Soumyaroop Roy <roy.soumyaroop@…287…> wrote:
Hi there:
I have an x-y plot and I want to draw a vertical marker (an x=c line) on the plot on a mouse click.
How should I approach it?
regards,
Soumyaroop
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network
management toolset available today. Delivers lowest initial
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Thanks Justin. I have the event handling thing in place and was really looking for drawing options. Thanks for the tips. I’ll look into them.
regards,
Soumyaroop
On Mon, May 2, 2011 at 11:06 AM, Justin McCann <jneilm@…287…> wrote:
You’ll want to use event handling to figure out where the user clicked, and then you have a couple of options: Axes.vlines(), or pylab.axvline(). It seems like pylab.axvline() will always span the entire y-axis by default, but with Axes.vlines() you need to specify the ymin/ymax. Maybe someone else knows of an argument to pass to Axes.vlines() that will always span the entire y-axis.
Here’s the code (assuming ‘ipython -pylab’):
========
fig = figure()
plot([1,2,3,4], [5,6,7,8])
def onclick(event):
“”“Draw a vertical line spanning the axes every time the user clicks inside them”“”
if event.inaxes: # make sure the click was within a set of axes
pylab.axvline(event.xdata, axes=event.inaxes, color=‘r’, linestyle=‘:’) # red dotted line
event.inaxes.figure.canvas.draw() # force a re-draw
cid = fig.canvas.mpl_connect(‘button_press_event’, onclick) # add the click handler
… interact with it
fig.canvas.mpl_disconnect(cid) # get rid of the click-handler
========
Docs:
Axes.vlines(): http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.vlines
pyplot.axvline(): http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.axvline
Event handling: http://matplotlib.sourceforge.net/users/event_handling.html
Example: http://matplotlib.sourceforge.net/examples/event_handling/data_browser.html
Justin
On Mon, May 2, 2011 at 10:08 AM, Soumyaroop Roy <roy.soumyaroop@…287…> wrote:
Any pointers on this?
On Sat, Apr 30, 2011 at 12:34 AM, Soumyaroop Roy <roy.soumyaroop@…878…287…> wrote:
Hi there:
I have an x-y plot and I want to draw a vertical marker (an x=c line) on the plot on a mouse click.
How should I approach it?
regards,
Soumyaroop
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network
management toolset available today. Delivers lowest initial
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Here's a short follow up question:
Is there a concept of erasing in matplotlib? If I were to erase an
axvline that I drew earlier, how would I do that? Can you use del to
delete the object and then force a redraw?
-Soumyaroop
On Mon, May 2, 2011 at 11:35 AM, Soumyaroop Roy <roy.soumyaroop@...287...> wrote:
Thanks Justin. I have the event handling thing in place and was really
looking for drawing options. Thanks for the tips. I'll look into them.
regards,
SoumyaroopOn Mon, May 2, 2011 at 11:06 AM, Justin McCann <jneilm@...287...> wrote:
You'll want to use event handling to figure out where the user clicked,
and then you have a couple of options: Axes.vlines(), or pylab.axvline(). It
seems like pylab.axvline() will always span the entire y-axis by default,
but with Axes.vlines() you need to specify the ymin/ymax. Maybe someone else
knows of an argument to pass to Axes.vlines() that will always span the
entire y-axis.
Here's the code (assuming 'ipython -pylab'):fig = figure()
plot([1,2,3,4], [5,6,7,8])
def onclick(event):
"""Draw a vertical line spanning the axes every time the user clicks
inside them"""
if event.inaxes: # make sure the click was within a set of axes
pylab.axvline(event.xdata, axes=event.inaxes, color='r',
linestyle=':') # red dotted line
event.inaxes.figure.canvas.draw() # force a re-draw
cid = fig.canvas.mpl_connect('button_press_event', onclick) # add the
click handler
... interact with it
fig.canvas.mpl_disconnect(cid) # get rid of the click-handlerDocs:
Axes.vlines():
http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.vlines
pyplot.axvline():
http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.axvline
Event
handling: http://matplotlib.sourceforge.net/users/event_handling.htmlExample: http://matplotlib.sourceforge.net/examples/event_handling/data_browser.html
JustinOn Mon, May 2, 2011 at 10:08 AM, Soumyaroop Roy <roy.soumyaroop@...1896....> >> wrote:
Any pointers on this?
On Sat, Apr 30, 2011 at 12:34 AM, Soumyaroop Roy >>> <roy.soumyaroop@...287...> wrote:Hi there:
I have an x-y plot and I want to draw a vertical marker (an x=c line) on
the plot on a mouse click.
How should I approach it?
regards,
Soumyaroop------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network
management toolset available today. Delivers lowest initial
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options
No, don't use del. If you save the object returned by the call to
axvline, then you should be able to call its .remove() method.
That should do the proper bookkeeping.
Ben Root
On Thursday, May 12, 2011, Soumyaroop Roy <roy.soumyaroop@...287...> wrote:
Here's a short follow up question:
Is there a concept of erasing in matplotlib? If I were to erase an
axvline that I drew earlier, how would I do that? Can you use del to
delete the object and then force a redraw?-Soumyaroop
On Mon, May 2, 2011 at 11:35 AM, Soumyaroop Roy > <roy.soumyaroop@...287...> wrote:
Thanks Justin. I have the event handling thing in place and was really
looking for drawing options. Thanks for the tips. I'll look into them.
regards,
SoumyaroopOn Mon, May 2, 2011 at 11:06 AM, Justin McCann <jneilm@...287...> wrote:
You'll want to use event handling to figure out where the user clicked,
and then you have a couple of options: Axes.vlines(), or pylab.axvline(). It
seems like pylab.axvline() will always span the entire y-axis by default,
but with Axes.vlines() you need to specify the ymin/ymax. Maybe someone else
knows of an argument to pass to Axes.vlines() that will always span the
entire y-axis.
Here's the code (assuming 'ipython -pylab'):fig = figure()
plot([1,2,3,4], [5,6,7,8])
def onclick(event):
"""Draw a vertical line spanning the axes every time the user clicks
inside them"""
if event.inaxes: # make sure the click was within a set of axes
pylab.axvline(event.xdata, axes=event.inaxes, color='r',
linestyle=':') # red dotted line
event.inaxes.figure.canvas.draw() # force a re-draw
cid = fig.canvas.mpl_connect('button_press_event', onclick) # add the
click handler
... interact with it
fig.canvas.mpl_disconnect(cid) # get rid of the click-handlerDocs:
Axes.vlines():
http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.vlines
pyplot.axvline():
http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.axvline
Event
handling: http://matplotlib.sourceforge.net/users/event_handling.htmlExample: http://matplotlib.sourceforge.net/examples/event_handling/data_browser.html
JustinOn Mon, May 2, 2011 at 10:08 AM, Soumyaroop Roy <roy.soumyaroop@...985.....> >>> wrote:
Any pointers on this?
On Sat, Apr 30, 2011 at 12:34 AM, Soumyaroop Roy >>>> <roy.soumyaroop@...287...> wrote:Hi there:
I have an x-y plot and I want to draw a vertical marker (an x=c line) on
the plot on a mouse click.
How should I approach it?
regards,
Soumyaroop
I see. Thanks, Ben.
-Soumyaroop
On Thu, May 12, 2011 at 10:32 AM, Benjamin Root <ben.root@...1304...> wrote:
On Thursday, May 12, 2011, Soumyaroop Roy <roy.soumyaroop@...287...> wrote:
Here's a short follow up question:
Is there a concept of erasing in matplotlib? If I were to erase an
axvline that I drew earlier, how would I do that? Can you use del to
delete the object and then force a redraw?-Soumyaroop
On Mon, May 2, 2011 at 11:35 AM, Soumyaroop Roy >> <roy.soumyaroop@...287...> wrote:
Thanks Justin. I have the event handling thing in place and was really
looking for drawing options. Thanks for the tips. I'll look into them.
regards,
SoumyaroopOn Mon, May 2, 2011 at 11:06 AM, Justin McCann <jneilm@...287...> wrote:
You'll want to use event handling to figure out where the user clicked,
and then you have a couple of options: Axes.vlines(), or pylab.axvline(). It
seems like pylab.axvline() will always span the entire y-axis by default,
but with Axes.vlines() you need to specify the ymin/ymax. Maybe someone else
knows of an argument to pass to Axes.vlines() that will always span the
entire y-axis.
Here's the code (assuming 'ipython -pylab'):fig = figure()
plot([1,2,3,4], [5,6,7,8])
def onclick(event):
"""Draw a vertical line spanning the axes every time the user clicks
inside them"""
if event.inaxes: # make sure the click was within a set of axes
pylab.axvline(event.xdata, axes=event.inaxes, color='r',
linestyle=':') # red dotted line
event.inaxes.figure.canvas.draw() # force a re-draw
cid = fig.canvas.mpl_connect('button_press_event', onclick) # add the
click handler
... interact with it
fig.canvas.mpl_disconnect(cid) # get rid of the click-handlerDocs:
Axes.vlines():
http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.vlines
pyplot.axvline():
http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.axvline
Event
handling: http://matplotlib.sourceforge.net/users/event_handling.htmlExample: http://matplotlib.sourceforge.net/examples/event_handling/data_browser.html
JustinOn Mon, May 2, 2011 at 10:08 AM, Soumyaroop Roy <roy.soumyaroop@...1972......> >>>> wrote:
Any pointers on this?
On Sat, Apr 30, 2011 at 12:34 AM, Soumyaroop Roy >>>>> <roy.soumyaroop@...287...> wrote:Hi there:
I have an x-y plot and I want to draw a vertical marker (an x=c line) on
the plot on a mouse click.
How should I approach it?
regards,
SoumyaroopNo, don't use del. If you save the object returned by the call to
axvline, then you should be able to call its .remove() method.That should do the proper bookkeeping.
Ben Root