Re: [Matplotlib-users] Issue with Redrawing a Line (numpy.ndarray, set_ydata, and draw)

2010-10-06 Thread Benjamin Root
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)

2010-10-06 Thread Jae-Joon Lee
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)

2010-10-06 Thread Michael Cracraft
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)

2010-10-06 Thread Michael Cracraft
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)

2010-10-06 Thread Benjamin Root
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