On Sat, May 21, 2011 at 10:38 AM, welsberr <welsb...@baywing.net> wrote:
>
>
> Daniel Mader-2 wrote:
> >
> > Hello,
> >
> > I have a problem with the 3D plotting of PolyCollections with
> > python-matplotlib-1.0.0 (on openSUSE 11.3 x86_64):
> >
> > instead of being correctly stacked as in the example
> > http://matplotlib.sourceforge.net/examples/mplot3d/polys3d_demo.html,
> > the plots are weirdly overlapping. The example works OK for me [...]
> >
> >
>
> The example does not work OK for me. I used it as a basis to plot some of
> my
> data, and at first I thought all was well. Two examples of my data plots
> and
> a plot showing the problem directly from the demo code are up at
>
>
> http://austringer.net/wp/index.php/2011/05/20/plotting-a-dolphin-biosonar-click-train/
>
> I tried using the manually-closed polygon workaround in my script without
> noticeable improvement.
>
>
The example had two separate issues. One was the layering issue, the second
is some sort of odd polygon-closing issue. Your problem for your example
(actually, there are two, but I will get to the second one later) is only
the layering issue. This can not be addressed by the manually closing the
polygons, as that was only trying to deal with the odd bug (which I still
have not solved).
> I then went back to the demo code, and I can reproduce the error just based
> on it.
>
> The last two plots show the problem. For my data plot, the first polygon
> (red) is plotted over the second polygon (blue). The problem is worse at
> various other angles, where up to a third of the polygons are plotted out
> of
> order. The plot from the demo code shows the blue polygon overlaid on the
> yellow polygon, when it should be the other way around.
>
>
This is a fundamental issue with the design of how mplot3d works with
matplotlib. Because matplotlib is strictly a 2-D plotting library with
layering. Therefore, mplot3d reduces the 3D data into an array of 2D
coordinates, and a single 'Z' value that is passed to the layering feature.
That single Z value represents the depth of all of the components of the 3D
polygons. Because of this dimension reduction is intrinsic to how
matplotlib works, this can never be completely resolved until matplotlib
itself supports 3D data (which will likely have to wait until some new
features come into numpy).
Therefore, mplot3d is only suggested to be used for "simple" 3D plots, and
more advanced 3D plots can be achieved with more advanced tools such as
mayavi. That being said...
> For the plot with more polygons, more ranges of viewing angle show the
> problem. I had to do a bit of searching to find the, admittedly odd,
> viewing
> angle that showed the problem in the demo code. I also changed both "alpha"
> specifications in the demo code to "1.0" so that transparency wasn't an
> issue in viewing, but the problem can be replicated in the unmodified demo
> script.
>
>
There are ways to "mitigate" the issue. For example, in the demo code
"polys3d_demo.py", we see that multiple polygons are added to a single
collection. Instead, you can create multiple collections with a single
polygon in them. This way, each polygon will have a better Z-value to
better represent more realistic sorting. In addition, there is a
set_zsort() function for Poly3DCollection that accepts a value of "average",
"min" and "max". By default, a Poly3DCollection uses the average depth
value of the vertices as the representative depth, but in some cases, the
minimum or the maximum might be better. Note that your PolyCollection
object gets turned into a Poly3DCollection after calling add_collection3d(),
so you can call set_zsort() after adding the collection to the 3d axes.
> Software versions:
> Python 2.6.2 (Windows)
> Matplotlib 0.99.3
>
>
As for the second issue I noticed. In your figures, the axes labels were
completely "askew" when you labeled your axes with longer names. This was a
bug that only recently was fixed. I believe I got it in for v1.0.1, but I
could be wrong. The fix is most definitely in the master branch of
matplotlib on the github repository. I am also currently working on making
the axes3d objects act a lot more like traditional axes objects, but this
will take some time.
I do like your plots, and I hope this information can help you produce a
better looking figure. (maybe you could even be able to sneak it in for
your publication during the revision process?) If you can get the figure
looking well enough, I might even be able to combine it with the new
animation module and produce an animated plot of a dolphin chirp?
I hope this information helps, and thank you for using matplotlib!
Ben Root
------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its
next-generation tools to help Windows* and Linux* C/C++ and Fortran
developers boost performance applications - including clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users