postscript backend: draw_markers

A while back I put in quite a bit of effort into enabling draw_markers in the
postscript backend. This is an efficient RendererPS function both in terms of
speed and file size, but it seems to not be used any more in favor of the
less efficient draw_polygon. Does anyone know why?

Darren

Which artist is triggering this call? The RendererPS defines
draw_markers, and this is the test Line2D uses to determine which
function to call:

  self._newstyle = hasattr(renderer, 'draw_markers')

thus newstyle will be True for PS. Then, in the Line2D marker drawing
function, eg

def _draw_square(...):

        if self._newstyle:
            path = agg.path_storage()
            path.move_to(-offset, -offset)
            path.line_to(-offset, offset)
            path.line_to(offset, offset)
            path.line_to(offset, -offset)
            path.end_poly()
            renderer.draw_markers(gc, path, rgbFace, xt, yt,
self.get_transform())
        else:

so my guess is Line2D *is* using draw_markers for backend_ps.
Patches.Polygon and derived will still be using the old draw_polygon,
but there is no speed bottleneck here since one normally just adds a
few Polygon instances manually (else use a Collection). The case we
were trying to optimize with draw_markers was

  ax.plot(x, y, 'o')

and related, where a 10,000 marker plot was triggering 10,000 calls to
draw_polygon, and now triggers one call to draw_markers for backends
that define it.

Note that in Michael's branch, this is mostly moot. He has completely
rewritten the transforms module in python and migrated to a path based
drawing model, overhauling Line2D, Patch and Collections in the
process. His branch is passing 75% or more of the examples and he
is hammering away at the rest -- so far he has been concentrating on
Agg but has recently begun the postscript work. It is will worth a
look, as this will be merged back into the trunk, probably after the
next major release.

svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/branches/transforms
mgd

JDH

···

On 10/19/07, Darren Dale <darren.dale@...143...> wrote:

A while back I put in quite a bit of effort into enabling draw_markers in the
postscript backend. This is an efficient RendererPS function both in terms of
speed and file size, but it seems to not be used any more in favor of the
less efficient draw_polygon. Does anyone know why?

I don't remember how to find the answer. It looks like scatter() creates
polygons, while plot() uses draw_markers:

import pylab

x = pylab.npy.arange(0,10)
pylab.scatter(x,x, s=50, alpha=0.5)
pylab.scatter(x,x+0.5, facecolor='blue', edgecolor='red', s=50, alpha=0)
pylab.plot(x,x+1, 'o', mfc='blue', mec='red', ms=8, alpha=0)

pylab.savefig('alpha.png')
pylab.savefig('alpha.eps')
pylab.show()

Comparing the png and eps, it looks like there is some inconsistancy in the
way scatter and plot ends up dealing with the alpha argument as well.

Darren

···

On Friday 19 October 2007 09:21:45 am John Hunter wrote:

On 10/19/07, Darren Dale <darren.dale@...143...> wrote:
> A while back I put in quite a bit of effort into enabling draw_markers in
> the postscript backend. This is an efficient RendererPS function both in
> terms of speed and file size, but it seems to not be used any more in
> favor of the less efficient draw_polygon. Does anyone know why?

Which artist is triggering this call?

I see -- scatter uses collections, and the defaut Renderer implements
PolygonCollection drawing through draw_polygon. This is correct,
because draw_markers assumes homogeneous markers, and scatter
implicitly assumes markers which vary in either size or shape (else
just use plot).

As for the alpha problem, I committed a change yesterday to fix alpha
with the facecolor argument to scatter. Are you working off of the
latest SVN?

JDH

···

On 10/19/07, Darren Dale <darren.dale@...143...> wrote:

I don't remember how to find the answer. It looks like scatter() creates
polygons, while plot() uses draw_markers:

I am. Here is the eps generated from the script in my previous email. For
scatter, alpha=0 causes the markers to not be drawn but not filled. For plot,
alpha=0 causes the markers to be drawn and filled.

Also, scatter does not respect the marker shape when drawing the legend.

Darren

alpha.eps (17.6 KB)

···

On Friday 19 October 2007 10:20:43 am John Hunter wrote:

On 10/19/07, Darren Dale <darren.dale@...143...> wrote:
> I don't remember how to find the answer. It looks like scatter() creates
> polygons, while plot() uses draw_markers:

I see -- scatter uses collections, and the defaut Renderer implements
PolygonCollection drawing through draw_polygon. This is correct,
because draw_markers assumes homogeneous markers, and scatter
implicitly assumes markers which vary in either size or shape (else
just use plot).

As for the alpha problem, I committed a change yesterday to fix alpha
with the facecolor argument to scatter. Are you working off of the
latest SVN?

Darren Dale wrote:

I don't remember how to find the answer. It looks like scatter() creates
polygons, while plot() uses draw_markers:

I see -- scatter uses collections, and the defaut Renderer implements
PolygonCollection drawing through draw_polygon. This is correct,
because draw_markers assumes homogeneous markers, and scatter
implicitly assumes markers which vary in either size or shape (else
just use plot).

As for the alpha problem, I committed a change yesterday to fix alpha
with the facecolor argument to scatter. Are you working off of the
latest SVN?

I am. Here is the eps generated from the script in my previous email. For scatter, alpha=0 causes the markers to not be drawn but not filled. For plot, alpha=0 causes the markers to be drawn and filled.

Also, scatter does not respect the marker shape when drawing the legend.

I've seen this behavior before too and think that legend definitely needs to be fixed for scatter to draw markers with the correct shape rather than just colored rectangles ...

Manuel

···

On Friday 19 October 2007 10:20:43 am John Hunter wrote:

On 10/19/07, Darren Dale <darren.dale@...143...> wrote:

------------------------------------------------------------------------

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/

------------------------------------------------------------------------

_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel