Re: [Matplotlib-users] Matplotlib + py3 + gtk3

2014-03-02 Thread Michael Droettboom
Thanks.  I'd definitely consider this a bug this.  Would you mind 
creating an issue or pull request on github.com/matplotlib/matplotlib so 
it doesn't get lost?


Mike

On 03/01/2014 05:42 PM, Jon Roadley-Battin wrote:

On 02/27/2014 06:58 PM, Jon Roadley-Battin wrote:
 Good evening,

 I am at present migrating an application of mine from py27+pygtk (with
 mpl) to py33+pygobject (gtk3)

 Unfortunately I am unable to use

 from  matplotlib.backends.backend_gtk3agg  import 
 FigureCanvasGTK3Agg  as  FigureCanvas
 from  matplotlib.backends.backend_gtk3  import 
 NavigationToolbar2GTK3  as  NavigationToolbar


 Which is is on the examples (
 
http://matplotlib.org/examples/user_interfaces/embedding_in_gtk3_panzoom.html

 ) but is also the logical translation from what I presently have.
 This falls fowl of the cairo issue

 What I am having to use is backend_gtk3cairo. However this is being
 triggered

  raise ValueError(The Cairo backend can not draw paths longer than
 18980 points.)

 I am generally plotting 7 x-y plots with upto 30,000 points.
 Now for now I have commented this out from my local install, is there
 a better/preferred/recommended alternative?

This was put in there because cairo had (at least at the time) a hard
coded limit on path size, and getting a Python exception was IMHO
preferable to segfaulting and having the process go away.  Are you
saying that when you comment it out, it's currently working?  It may be
that cairo has fixed this limit in the intervening years. Can you
provide a simple, standalone example that reproduces the error?


Using python33  pygi-aio-3.10.2-win32_rev18 (to provide pygobject for 
windows:)
Using: 
http://matplotlib.org/examples/user_interfaces/embedding_in_gtk3_panzoom.html 
as the baseline provides the following error:


  File 
c:\Python33\lib\site-packages\matplotlib\backends\backend_gtk3agg.py, line 
52, in on_draw_event

buf, cairo.FORMAT_ARGB32, width, height)
NotImplementedError: Surface.create_for_data: Not Implemented yet.


This has been mentioned a few times across the ml

Modifying the example to use backend_gtk3cairo

from matplotlib.backends.backend_gtk3cairo import 
FigureCanvasGTK3Cairo as FigureCanvas
from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as 
NavigationToolbar



Now the example runs and plots a nice sinewave (as expected). Modify 
the script to plot 7 waveforms, 100pts


##
#!/usr/bin/env python3

demonstrate NavigationToolbar with GTK3 accessed via pygobject


from gi.repository import Gtk

from matplotlib.figure import Figure
import numpy as np
from matplotlib.backends.backend_gtk3cairo import 
FigureCanvasGTK3Cairo as FigureCanvas
from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as 
NavigationToolbar



win = Gtk.Window()
win.connect(delete-event, Gtk.main_quit )
win.set_default_size(400,300)
win.set_title(Embedding in GTK)

fig = Figure(figsize=(5,4), dpi=100)
plt = fig.add_subplot(1,1,1)

t = np.arange(0,2*np.pi,2*np.pi/100)
a = np.sin(t + 0*(2*np.pi/7))
b = np.sin(t + 1*(2*np.pi/7))
c = np.sin(t + 2*(2*np.pi/7))
d = np.sin(t + 3*(2*np.pi/7))
e = np.sin(t + 4*(2*np.pi/7))
f = np.sin(t + 5*(2*np.pi/7))
g = np.sin(t + 6*(2*np.pi/7))
plt.plot(t,a)
plt.plot(t,b)
plt.plot(t,c)
plt.plot(t,d)
plt.plot(t,e)
plt.plot(t,f)
plt.plot(t,g)

vbox = Gtk.VBox()
win.add(vbox)

# Add canvas to vbox
canvas = FigureCanvas(fig)  # a Gtk.DrawingArea
vbox.pack_start(canvas, True, True, 0)

# Create toolbar
toolbar = NavigationToolbar(canvas, win)
vbox.pack_start(toolbar, False, False, 0)

win.show_all()
Gtk.main()


This works, its only 100pts for 7 scatters so nothing unexpected.
Modify the arange to create a time array of 30,000 pts.

t = np.arange(0,2*np.pi,2*np.pi/3)


  File 
c:\Python33\lib\site-packages\matplotlib\backends\backend_cairo.py, 
line 143, in draw_path
raise ValueError(The Cairo backend can not draw paths longer than 
18980 points.)

ValueError: The Cairo backend can not draw paths longer than 18980 points.


The already mentioned raise to protect against a segfault.
Edit backend_cairo to comment out the check:


def draw_path(self, gc, path, transform, rgbFace=None):
#if len(path.vertices)  18980:
#raise ValueError(The Cairo backend can not draw paths 
longer than 18980 points.)


ctx = gc.ctx



7channel, 30,000 pts each is plotted just fine. Zoom rectangle is slow 
to render, but this is true for 100pts (so more a gtk3 thing than a 
cairo and multiple points thing)


Final script:



###
#!/usr/bin/env python3

demonstrate NavigationToolbar with GTK3 accessed via pygobject


from gi.repository import Gtk

from 

[Matplotlib-users] Matplotlib + py3 + gtk3

2014-03-01 Thread Jon Roadley-Battin
On 02/27/2014 06:58 PM, Jon Roadley-Battin wrote:
 Good evening,

 I am at present migrating an application of mine from py27+pygtk (with
 mpl) to py33+pygobject (gtk3)

 Unfortunately I am unable to use

 from  matplotlib.backends.backend_gtk3agg  import  FigureCanvasGTK3Agg
 as  FigureCanvas
 from  matplotlib.backends.backend_gtk3  import  NavigationToolbar2GTK3
 as  NavigationToolbar

 Which is is on the examples (

http://matplotlib.org/examples/user_interfaces/embedding_in_gtk3_panzoom.html
 ) but is also the logical translation from what I presently have.
 This falls fowl of the cairo issue

 What I am having to use is backend_gtk3cairo. However this is being
 triggered

  raise ValueError(The Cairo backend can not draw paths longer than
 18980 points.)

 I am generally plotting 7 x-y plots with upto 30,000 points.
 Now for now I have commented this out from my local install, is there
 a better/preferred/recommended alternative?

This was put in there because cairo had (at least at the time) a hard
coded limit on path size, and getting a Python exception was IMHO
preferable to segfaulting and having the process go away.  Are you
saying that when you comment it out, it's currently working?  It may be
that cairo has fixed this limit in the intervening years. Can you
provide a simple, standalone example that reproduces the error?


Using python33  pygi-aio-3.10.2-win32_rev18 (to provide pygobject for
windows:)
Using:
http://matplotlib.org/examples/user_interfaces/embedding_in_gtk3_panzoom.htmlas
the baseline provides the following error:

  File
c:\Python33\lib\site-packages\matplotlib\backends\backend_gtk3agg.py,
line 52, in on_draw_event
buf, cairo.FORMAT_ARGB32, width, height)
NotImplementedError: Surface.create_for_data: Not Implemented yet.


This has been mentioned a few times across the ml

Modifying the example to use backend_gtk3cairo

from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as
FigureCanvas
from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as
NavigationToolbar


Now the example runs and plots a nice sinewave (as expected). Modify the
script to plot 7 waveforms, 100pts

##
#!/usr/bin/env python3

demonstrate NavigationToolbar with GTK3 accessed via pygobject


from gi.repository import Gtk

from matplotlib.figure import Figure
import numpy as np
from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as
FigureCanvas
from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as
NavigationToolbar


win = Gtk.Window()
win.connect(delete-event, Gtk.main_quit )
win.set_default_size(400,300)
win.set_title(Embedding in GTK)

fig = Figure(figsize=(5,4), dpi=100)
plt = fig.add_subplot(1,1,1)

t = np.arange(0,2*np.pi,2*np.pi/100)
a = np.sin(t + 0*(2*np.pi/7))
b = np.sin(t + 1*(2*np.pi/7))
c = np.sin(t + 2*(2*np.pi/7))
d = np.sin(t + 3*(2*np.pi/7))
e = np.sin(t + 4*(2*np.pi/7))
f = np.sin(t + 5*(2*np.pi/7))
g = np.sin(t + 6*(2*np.pi/7))
plt.plot(t,a)
plt.plot(t,b)
plt.plot(t,c)
plt.plot(t,d)
plt.plot(t,e)
plt.plot(t,f)
plt.plot(t,g)

vbox = Gtk.VBox()
win.add(vbox)

# Add canvas to vbox
canvas = FigureCanvas(fig)  # a Gtk.DrawingArea
vbox.pack_start(canvas, True, True, 0)

# Create toolbar
toolbar = NavigationToolbar(canvas, win)
vbox.pack_start(toolbar, False, False, 0)

win.show_all()
Gtk.main()


This works, its only 100pts for 7 scatters so nothing unexpected.
Modify the arange to create a time array of 30,000 pts.

t = np.arange(0,2*np.pi,2*np.pi/3)


  File
c:\Python33\lib\site-packages\matplotlib\backends\backend_cairo.py, line
143, in draw_path
raise ValueError(The Cairo backend can not draw paths longer than
18980 points.)
ValueError: The Cairo backend can not draw paths longer than 18980 points.


The already mentioned raise to protect against a segfault.
Edit backend_cairo to comment out the check:


def draw_path(self, gc, path, transform, rgbFace=None):
#if len(path.vertices)  18980:
#raise ValueError(The Cairo backend can not draw paths longer
than 18980 points.)

ctx = gc.ctx



7channel, 30,000 pts each is plotted just fine. Zoom rectangle is slow to
render, but this is true for 100pts (so more a gtk3 thing than a cairo and
multiple points thing)

Final script:



###
#!/usr/bin/env python3

demonstrate NavigationToolbar with GTK3 accessed via pygobject


from gi.repository import Gtk

from matplotlib.figure import Figure
import numpy as np
from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as
FigureCanvas   #changed to use gtk3cairo
from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as

Re: [Matplotlib-users] Matplotlib + py3 + gtk3 wouws

2014-02-28 Thread Michael Droettboom

On 02/27/2014 06:58 PM, Jon Roadley-Battin wrote:

Good evening,

I am at present migrating an application of mine from py27+pygtk (with 
mpl) to py33+pygobject (gtk3)


Unfortunately I am unable to use

from  matplotlib.backends.backend_gtk3agg  import  FigureCanvasGTK3Agg  as  
FigureCanvas
from  matplotlib.backends.backend_gtk3  import  NavigationToolbar2GTK3  as  
NavigationToolbar

Which is is on the examples ( 
http://matplotlib.org/examples/user_interfaces/embedding_in_gtk3_panzoom.html 
) but is also the logical translation from what I presently have.

This falls fowl of the cairo issue

What I am having to use is backend_gtk3cairo. However this is being 
triggered


 raise ValueError(The Cairo backend can not draw paths longer than 
18980 points.)


I am generally plotting 7 x-y plots with upto 30,000 points.
Now for now I have commented this out from my local install, is there 
a better/preferred/recommended alternative?


This was put in there because cairo had (at least at the time) a hard 
coded limit on path size, and getting a Python exception was IMHO 
preferable to segfaulting and having the process go away.  Are you 
saying that when you comment it out, it's currently working?  It may be 
that cairo has fixed this limit in the intervening years. Can you 
provide a simple, standalone example that reproduces the error?


I have read about cairocffi but this doesn't 
seem conveniently possible at this moment in time (especially for 
windows)


I'm not sure if the Python wrappers will matter, since this issue is 
actually in the underlying Cairo library.




Equally I have seen mpl-devel mailing list entries from 4years ago 
stating that this check was to be removed (a cairo 1.4.10 issue)


Are you referring to this thread?

http://matplotlib.1069221.n5.nabble.com/Path-length-in-the-cairo-backend-td36582.html

The conclusion there (if you scroll down) was that the check is still 
needed as of Cairo 1.8.


Mike



JonRB


--
Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis  security monitoring. All-in-one tool.
http://pubads.g.doubleclick.net/gampad/clk?id=126839071iu=/4140/ostg.clktrk


___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users



--
   _
|\/|o _|_  _. _ | | \.__  __|__|_|_  _  _ ._ _
|  ||(_| |(_|(/_| |_/|(_)(/_|_ |_|_)(_)(_)| | |

http://www.droettboom.com

--
Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis  security monitoring. All-in-one tool.
http://pubads.g.doubleclick.net/gampad/clk?id=126839071iu=/4140/ostg.clktrk___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] Matplotlib + py3 + gtk3 wouws

2014-02-27 Thread Jon Roadley-Battin
Good evening,

I am at present migrating an application of mine from py27+pygtk (with mpl)
to py33+pygobject (gtk3)

Unfortunately I am unable to use

from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as
FigureCanvasfrom matplotlib.backends.backend_gtk3 import
NavigationToolbar2GTK3 as NavigationToolbar


Which is is on the examples (
http://matplotlib.org/examples/user_interfaces/embedding_in_gtk3_panzoom.html)
but is also the logical translation from what I presently have.
This falls fowl of the cairo issue

What I am having to use is backend_gtk3cairo. However this is being
triggered

 raise ValueError(The Cairo backend can not draw paths longer than 18980
points.)

I am generally plotting 7 x-y plots with upto 30,000 points.
Now for now I have commented this out from my local install, is there a
better/preferred/recommended alternative?
I have read about cairocffi but this doesn't seem conveniently possible at
this moment in time (especially for windows)

Equally I have seen mpl-devel mailing list entries from 4years ago stating
that this check was to be removed (a cairo 1.4.10 issue)

JonRB
--
Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis  security monitoring. All-in-one tool.
http://pubads.g.doubleclick.net/gampad/clk?id=126839071iu=/4140/ostg.clktrk___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users