From: Eric B. <eri...@gm...> - 2008-05-04 04:44:54
|
Hi, On trunk, there is mixed-mode rendering support built in to (at least) the SVG and PDF backends, though there are no calls to start/stop_rasterizing() that utilize the raster mode. I've implemented mode switching for those backends, and would appreciate feedback on what I've done. There are two modes that might drive a switch to raster for some artists: 1. User-driven specification of known complex artitsts. 2. Automatic detection of artist complexity (by type or vertex count). The first mode is what I coded up, so I'll discuss it below. A list of artists to rasterize is passed as a draw_raster kwarg to savefig, which percolates down into print_* in the backend-specific figure canvas. When the backend's canvas creates a renderer, the draw_raster list is placed as an attribute on the renderer instance. I figured that the renderer should be responsible for transporting the list of artists needing rasterization, since it's at the renderer level that pixel vs. vector matters. The switch to/from raster mode was made in Axes.draw, where the artists for each axes are looped over. In the artist loop, I check if the artist to be rendered is listed in the draw_raster attribute on the renderer instance. If so, the appropriate calls are made to start and stop rasterizing. Sample usage: f=pyplot.figure() ax=f.add_subplot(111) p,=ax.plot(range(10)) f.savefig('test.pdf', draw_raster=(p,)) svn diff at http://www.deeplycloudy.com/20080503-matplotlib-mixed-mode-r5110.diff Thanks, Eric Bruning Graduate Research Assistant, Meteorology, Univ. Oklahoma As of 6/1/2008, Research Assoc., Univ. Maryland/CICS and NOAA/NESDIS/STAR |