[IPython-dev] [QUAR] Re: Qt SVG clipping bug (it's NOT a matplotlib bug)- Qt won't fix...
mark.voorhies at ucsf.edu
Thu Oct 14 12:58:42 EDT 2010
On Thursday, October 14, 2010 08:27:10 am Michael Droettboom wrote:
> On 10/14/2010 10:52 AM, Robert Kern wrote:
> > On 10/14/10 3:55 AM, Hans Meine wrote:
> > It might be worthwhile for matplotlib to only use the SVG 1.2 Tiny standard for
> > greater compatibility. Tiny is much easier to implement, so I suspect there are
> > now more Tiny renderers now than there are Full renderers.
> This is true -- and we can probably remove some of the simpler-to-remove
> parts that are missing from SVG Tiny. However, to support clipping, we
> either have to either a) write the routines to do clipping in vector
> space or b) use rasterized fallbacks (as we do for some alpha issues in
> Postscript, for instance). a) is non-trivial in the general case,
> particularly when accounting for line thicknesses, and b) is a hack.
Just to clarify what's happening on the iPython Qt console side:
* We receive SVG (with clipping path) from Matplotlib
* We wrap the SVG in Qt's rasterizer
calling svg.svg_to_image) and drop that as a widget on the
+ As noted, the Qt rasterizer doesn't implement clipping, so
we get unclipped plots drawn on the console.
+ This strategy also results in rasterized plots in the PDF export.
* For the context menu "Save Image As" and "Export HTML"
functions, we call save(filename, "PNG") on the Qt
rasterizer, so we get the same lack-of-clipping artifact.
* For the context menu "Save SVG As" and "Export XHTML"
we work from Matplotlib's original SVG, so the clipping path
is retained (and we get correct clipping in Inkscape, Firefox,
* Saving as PNG via Matplotlib's GUI as launched from iPython
gives a correctly clipped PNG. I'm not sure if Matplotlib is
rasterizing directly, or drawing to the GUI canvas and then
asking the GUI to generate a PNG. Also, not sure which
GUI backend I'm looking at...
Would it be reasonable to bypass the Qt issue by asking Matplotlib
for a PNG at the time that we receive the SVG and put that on
our console canvas? It seems like this would be a good general
strategy for supporting non-Qt frontends (e.g., James Gao might
want something like this for the HTML frontend to support older
More information about the IPython-dev