Would it make sense to at least emit a warning when a mask is encountered. There are very few places in matplotlib where masked arrays are not allowed (I think histograms is the other spot, but I can't remember for sure).
On Sun, Nov 2, 2014 at 11:10 AM, Ian Thomas <ianthoma...@gmail.com> wrote: > On 1 November 2014 18:20, Hartmut Kaiser <hartmut.kai...@gmail.com> wrote: > >> Thanks Ian! Your detailed answer is much appreciated. >> >> As you might have already guessed, we have quite some problems creating >> clean geometries from the generated contour data. I have tried to put >> together one (reasonably) small test case illustrating at least one of our >> issues. I apologize for the lengthy code attached. >> >> The two attached figures demonstrate what we see. Matplotlib.png >> (generated by the library) does not really look ok. Also, the attached >> shape.png shows that there are a lot of geometries generated which are >> self-intersecting (highlighted in dark blue), and we already skip polygons >> with less than 3 points. BTW, there are many polygons stacked with the same >> geometries. >> >> Anything we can do about this? >> >> Thanks! >> Regards Hartmut >> > > Hartmut, > > You are using masked arrays where you shouldn't, again. The documentation > for tricontour states that it expects z to be an array, it doesn't say > masked array. If you pass it a masked array, it will ignore the mask. > Hence you have a number of triangles that include a vertex with a z-value > of -99999; when contoured these are going to give you lots of thin polygons > that you don't want. > > You need to stop using masked arrays where they are not expected. Your > triangulation should only contain triangles for which you have valid data > at all three vertices. So either remove invalid triangles from your 'ele' > array before creating the triangulation, or set a mask on the triangulation > once it has been created, e.g. > > point_mask_indices = numpy.where(z.mask) > tri_mask = numpy.any(numpy.in1d(ele, point_mask_indices).reshape(-1, > 3), axis=1) > triang.set_mask(tri_mask) > > Ian > > > ------------------------------------------------------------------------------ > > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > >
------------------------------------------------------------------------------
_______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users