Re: [Matplotlib-users] Issue with Redrawing a Line (numpy.ndarray, set_ydata, and draw)
On Wed, Oct 6, 2010 at 1:06 PM, Michael Cracraft michael.cracr...@gmail.com wrote: I have a code that continuously modifies a numpy.ndarray variable. Then, I use set_ydata on the matplotlib.lines.Line2D object to the same ndarray variable. Then, I call fig.canvas.draw() to redraw the figure, where fig is Figure object. However, the line on the graph never changes. I print a few entries to the console to make sure that the variable is changing. It seems like the only way I can get the line to update is to create a completely new ndarray, update that variable with the new values and use set_ydata on my line object. Then, the redraw works. Other things that I tried that didn't seem to work were: L1.set_ydata(x[:]) L1.set_ydata(x.tolist()) L1.set_ydata(list(x)) where L1 is my line object, and x is my ndarray. To make it redraw I have to do something like this. xnew = numpy.zeros(numpy.size(x,0)) for k in range(numpy.size(x,0)): xnew[k] = x[k] L1.set_ydata(xnew) fig.canvas.draw() Is there some switch I can set to force a redraw of the elements? I feel like I am missing something fundamental. Thanks, Michael Michael, Which version of matplotlib are you using? Which backend are you using? Also, could you include a small script or two that demonstrate the problem? This way, we can poke around with it and see what is up. Ben Root -- Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today. http://p.sf.net/sfu/beautyoftheweb___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Issue with Redrawing a Line (numpy.ndarray, set_ydata, and draw)
I believe that you're using older version of mpl (1.0) and this is a known issues, which has been fixed. http://sourceforge.net/tracker/?func=detailaid=2917758group_id=80706atid=560720 Try to add L1.recache() after set_ydata. Regards, -JJ On Thu, Oct 7, 2010 at 3:06 AM, Michael Cracraft michael.cracr...@gmail.com wrote: I have a code that continuously modifies a numpy.ndarray variable. Then, I use set_ydata on the matplotlib.lines.Line2D object to the same ndarray variable. Then, I call fig.canvas.draw() to redraw the figure, where fig is Figure object. However, the line on the graph never changes. I print a few entries to the console to make sure that the variable is changing. It seems like the only way I can get the line to update is to create a completely new ndarray, update that variable with the new values and use set_ydata on my line object. Then, the redraw works. Other things that I tried that didn't seem to work were: L1.set_ydata(x[:]) L1.set_ydata(x.tolist()) L1.set_ydata(list(x)) where L1 is my line object, and x is my ndarray. To make it redraw I have to do something like this. xnew = numpy.zeros(numpy.size(x,0)) for k in range(numpy.size(x,0)): xnew[k] = x[k] L1.set_ydata(xnew) fig.canvas.draw() Is there some switch I can set to force a redraw of the elements? I feel like I am missing something fundamental. Thanks, Michael -- _ -- Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today. http://p.sf.net/sfu/beautyoftheweb ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today. http://p.sf.net/sfu/beautyoftheweb ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Issue with Redrawing a Line (numpy.ndarray, set_ydata, and draw)
I am running python 2.6.4 and matplotlib 0.99.1.1. I was using the TkAgg backend with my original problem, but I tried GTKAgg with the same result. Here are two sample codes. One works and the other does not. This one works ... plt.ion() x = np.arange(0,2*np.pi,0.01) y = np.sin(x) line, = plt.plot(x,y) for i in np.arange(1,200): y = np.sin(x + i/10.0) line.set_ydata(y) plt.draw() This one does not ... plt.ion() x = np.arange(0,2*np.pi,0.01) y = np.sin(x) line, = plt.plot(x,y) for i in np.arange(1,200): for k in range(len(x)): y[k] = np.sin(x[k] + i/10.0) line.set_ydata(y) plt.draw() The only real difference is that I do not get a new ndarray instance in the second one. My guess was that there was something to do with the object being the same instance as before causing some issue when I updated the ydata. On Wed, Oct 6, 2010 at 7:56 PM, Benjamin Root ben.r...@ou.edu wrote: On Wed, Oct 6, 2010 at 1:06 PM, Michael Cracraft michael.cracr...@gmail.com wrote: I have a code that continuously modifies a numpy.ndarray variable. Then, I use set_ydata on the matplotlib.lines.Line2D object to the same ndarray variable. Then, I call fig.canvas.draw() to redraw the figure, where fig is Figure object. However, the line on the graph never changes. I print a few entries to the console to make sure that the variable is changing. It seems like the only way I can get the line to update is to create a completely new ndarray, update that variable with the new values and use set_ydata on my line object. Then, the redraw works. Other things that I tried that didn't seem to work were: L1.set_ydata(x[:]) L1.set_ydata(x.tolist()) L1.set_ydata(list(x)) where L1 is my line object, and x is my ndarray. To make it redraw I have to do something like this. xnew = numpy.zeros(numpy.size(x,0)) for k in range(numpy.size(x,0)): xnew[k] = x[k] L1.set_ydata(xnew) fig.canvas.draw() Is there some switch I can set to force a redraw of the elements? I feel like I am missing something fundamental. Thanks, Michael Michael, Which version of matplotlib are you using? Which backend are you using? Also, could you include a small script or two that demonstrate the problem? This way, we can poke around with it and see what is up. Ben Root -- _ -- Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today. http://p.sf.net/sfu/beautyoftheweb___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Issue with Redrawing a Line (numpy.ndarray, set_ydata, and draw)
You are correct about the version. I was just working with the version installed on Fedora 13, and the recache works. Looks like a working solution for now. Thanks, Michael On Wed, Oct 6, 2010 at 8:18 PM, Jae-Joon Lee lee.j.j...@gmail.com wrote: I believe that you're using older version of mpl (1.0) and this is a known issues, which has been fixed. http://sourceforge.net/tracker/?func=detailaid=2917758group_id=80706atid=560720 Try to add L1.recache() after set_ydata. Regards, -JJ On Thu, Oct 7, 2010 at 3:06 AM, Michael Cracraft michael.cracr...@gmail.com wrote: I have a code that continuously modifies a numpy.ndarray variable. Then, I use set_ydata on the matplotlib.lines.Line2D object to the same ndarray variable. Then, I call fig.canvas.draw() to redraw the figure, where fig is Figure object. However, the line on the graph never changes. I print a few entries to the console to make sure that the variable is changing. It seems like the only way I can get the line to update is to create a completely new ndarray, update that variable with the new values and use set_ydata on my line object. Then, the redraw works. Other things that I tried that didn't seem to work were: L1.set_ydata(x[:]) L1.set_ydata(x.tolist()) L1.set_ydata(list(x)) where L1 is my line object, and x is my ndarray. To make it redraw I have to do something like this. xnew = numpy.zeros(numpy.size(x,0)) for k in range(numpy.size(x,0)): xnew[k] = x[k] L1.set_ydata(xnew) fig.canvas.draw() Is there some switch I can set to force a redraw of the elements? I feel like I am missing something fundamental. Thanks, Michael -- _ -- Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today. http://p.sf.net/sfu/beautyoftheweb ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- _ -- Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today. http://p.sf.net/sfu/beautyoftheweb___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Issue with Redrawing a Line (numpy.ndarray, set_ydata, and draw)
On Wed, Oct 6, 2010 at 7:31 PM, Michael Cracraft michael.cracr...@gmail.com wrote: You are correct about the version. I was just working with the version installed on Fedora 13, and the recache works. Looks like a working solution for now. Thanks, Michael Just as a side note because 'tis the season for Linux upgrades... It looks like Jef Spaleta has packaged the version 1.0 of mpl for the upcoming Fedora 14 release (early Nov.). However, Ubuntu 10.10 (Maverick Meerkat) will be released in a few days with version 0.99.3. Is this because Ubuntu typically follows whatever is in the Debian repos? Ben Root -- Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today. http://p.sf.net/sfu/beautyoftheweb___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users