<div dir="ltr"><div><div><div>Remo,<br><br></div>I certainly do consider this a bug, however, it is one of those rare situations where we just can't seem to figure out how to fix it. We have made attempts before and it has had some limited success, particularly in the colorbar situation which goes through similar code paths in AGG. I would certainly love to see it get totally fixed, as it is an unsightly wart in the library.<br><br></div>I think the main problem is that there aren't enough people who are experts in the AGG library that could either tell us what we are doing wrong in using AGG, or recognize the problem and propose a patch that would fix the problem in AGG (assuming that the problem is even located there). For all we know, the problem could be in our path-handling code. As it stands right now, the core devs probably just simply have too much on their plate to hunt this particular one down at this time. If someone else can figure this problem out, we would accept the patch in a heartbeat.<br><br></div>Ben Root<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 12, 2015 at 4:07 AM, Remo Goetschi <span dir="ltr"><<a href="mailto:surf@libecciu.ch" target="_blank">surf@libecciu.ch</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
Thanks for your response. Hm, are you saying there is probably no way to<br>
work around this?<br>
Are there other opinions?<br>
<br>
Personally, I consider this a bug (or two bugs, since pcolormesh() has a<br>
problem as well). It looks really ugly if you, e.g., use<br>
semi-transparent plots as map overlays.<br>
<br>
Cheers,<br>
Remo<br>
<span class=""><br>
<br>
On 11.11.2015 15:53, Jens Nielsen wrote:<br>
> The issue you are seeing is slightly different from the one the docs<br>
> mention.<br>
> I wrote the docs suggesting the work around and this is mainly relevant<br>
> for vector backends (PDF and so on) The problem with PDF viewers is that<br>
> many of them create visible gaps when two polygons are rendered next to<br>
> each other with zero overlap. This is a viewer specific thing but lots<br>
> of viewers suffers from this.<br>
> This effect is much more visible that the one you see. I think the one<br>
> you see is due to the way the edge between the 2 colours is antialiased<br>
> by the render.<br>
><br>
> The work around with adding  edges is only a workaround exactly as you<br>
> remarked because it doesn't work well with non transparent surfaces.<br>
><br>
> best<br>
> Jens<br>
><br>
> On Wed, 11 Nov 2015 at 13:44 Remo Goetschi <<a href="mailto:surf@libecciu.ch">surf@libecciu.ch</a><br>
</span><div><div class="h5">> <mailto:<a href="mailto:surf@libecciu.ch">surf@libecciu.ch</a>>> wrote:<br>
><br>
>     Hi,<br>
><br>
>     Does somebody know how to produce a good-looking filled contour plot<br>
>     with semi-transparent colors? If contourf() is passed a colormap with<br>
>     semi-transparent colors, it produces small gaps between the filled<br>
>     areas:<br>
>     <a href="http://i.stack.imgur.com/eEQXI.png" rel="noreferrer" target="_blank">http://i.stack.imgur.com/eEQXI.png</a><br>
><br>
>     According to the docs, this is not a bug ("contourf() [...] does not<br>
>     draw the polygon edges"). To draw the edges, it is suggested to "add<br>
>     line contours with calls to contour()". But that doesn't look good<br>
>     either as the edges become too opaque:<br>
>     <a href="http://i.stack.imgur.com/s17F9.png" rel="noreferrer" target="_blank">http://i.stack.imgur.com/s17F9.png</a><br>
>     You can play with the linewidth argument of contour(), but that doesn't<br>
>     help much. Any ideas?<br>
><br>
>     The code that reproduces the problem is attached below (I use the<br>
>     object-oriented API, but the result is the same with pyplot).<br>
><br>
>     BTW, pcolormesh() suffers from a similar problem:<br>
>     <a href="http://i.stack.imgur.com/Gbwcb.png" rel="noreferrer" target="_blank">http://i.stack.imgur.com/Gbwcb.png</a><br>
><br>
>     Both problems do not seem to occur with the SVG backend.<br>
><br>
>     I asked the same question already on stackoverflow. Feel free to respond<br>
>     there:<br>
>     <a href="http://stackoverflow.com/questions/33547926/matplotlib-filled-contour-plot-with-transparent-colors" rel="noreferrer" target="_blank">http://stackoverflow.com/questions/33547926/matplotlib-filled-contour-plot-with-transparent-colors</a><br>
><br>
>     Thanks,<br>
>     Remo<br>
><br>
>     ---------<br>
>     import matplotlib<br>
>     import numpy as np<br>
>     from matplotlib.figure import Figure<br>
>     from matplotlib.backends.backend_agg import FigureCanvasAgg<br>
><br>
>     # generate some data<br>
>     shape = (100, 100)<br>
>     x_rng = np.linspace(-1, 1, shape[1])<br>
>     y_rng = np.linspace(-1, 1, shape[0])<br>
>     x, y = np.meshgrid(x_rng, y_rng)<br>
>     z = np.sqrt(x**2 + y**2)<br>
><br>
>     # create figure<br>
>     width_inch, height_inch = 5, 5  # results in 500x500px with dpi=100<br>
>     fig = Figure()<br>
>     fig.set_size_inches((width_inch, height_inch))<br>
>     FigureCanvasAgg(fig)<br>
>     ax = fig.add_axes([0., 0., 1., 1.])<br>
>     ax.set_axis_off()<br>
><br>
>     # define some colors with alpha < 1<br>
>     alpha = 0.9<br>
>     colors = [<br>
>         (0.1, 0.1, 0.5, alpha),  # dark blue<br>
>         (0.0, 0.7, 0.3, alpha),  # green<br>
>         (0.9, 0.2, 0.7, alpha),  # pink<br>
>         (0.0, 0.0, 0.0, alpha),  # black<br>
>         (0.1, 0.7, 0.7, alpha),  # light blue<br>
>     ]<br>
>     cmap = matplotlib.colors.ListedColormap(colors)<br>
>     levels = np.array(np.linspace(0, z.max(), len(colors)))<br>
>     norm = matplotlib.colors.BoundaryNorm(levels, ncolors=cmap.N)<br>
><br>
>     # contourf plot produces small gaps between filled areas<br>
>     cnt = ax.contourf(x, y, z, levels, cmap=cmap, norm=norm,<br>
>                       antialiased=True, linecolor='none')<br>
><br>
>     # this fills the gaps, but it makes them too opaque<br>
>     # ax.contour(x, y, z, levels, cmap=cmap, norm=norm,<br>
>     #            antialiased=True)<br>
><br>
>     # the same is true for this trick:<br>
>     # for c in cnt.collections:<br>
>     #     c.set_edgecolor("face")<br>
><br>
>     filename = "/tmp/contourf.png"<br>
>     fig.savefig(filename, dpi=100, transparent=True, format="png")<br>
>     print("Saved plot to {}.".format(filename))<br>
>     _______________________________________________<br>
>     Matplotlib-users mailing list<br>
</div></div>>     <a href="mailto:Matplotlib-users@python.org">Matplotlib-users@python.org</a> <mailto:<a href="mailto:Matplotlib-users@python.org">Matplotlib-users@python.org</a>><br>
>     <a href="https://mail.python.org/mailman/listinfo/matplotlib-users" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/matplotlib-users</a><br>
<div class="HOEnZb"><div class="h5">><br>
<br>
_______________________________________________<br>
Matplotlib-users mailing list<br>
<a href="mailto:Matplotlib-users@python.org">Matplotlib-users@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/matplotlib-users" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/matplotlib-users</a><br>
</div></div></blockquote></div><br></div>