Hi – this is my first post to such a list, so bear with me.
I’ve just installed mpl3d and have had success with the examples shown at http://www.scipy.org/Cookbook/Matplotlib/mplot3D
We currently don’t have numpy installed and using the older Numeric, so I used the following instead:
N = 100 x = zeros((N,N),Float) y = zeros((N,N),Float) z = zeros((N,N),Float) u = arange(0,2*pi,2.*pi/N) v = arange(0,2*pi,2.*pi/N)
for i in range(N): for j in range(N): x[i,j] = cos(u[i])*sin(v[j]) y[i,j] = sin(u[i])*sin(v[j]) z[i,j] = cos(v[j])
fig=p.figure() ax = p3.Axes3D(fig) ax.plot_surface(x,y,z) ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') fig.add_axes(ax) p.show() p.savefig('surfacetest') p.close()
which worked a treat (apart from the figure not closing on the first instance …).
However, if I change N to 10, I get the following error message:
Traceback (most recent call last): File "test.py", line 47, in ? ax.plot_surface(x,y,z) File "c:\Python24\lib\site-packages\mpl3d\mplot3d.py, line 921, in plot_surface norm = normalize(min(shade),max(shade)) ValueError: min() arg is an empty sequence
It seems that if the number of columns or rows is less than 20 than rstride and cstride = 0. This means that the boxes required to make the polygons in the surface plot won’t be constructed. However, you can get a 3D plot if you use plot_wireframe or plot3D instead with N = 10 (but these plots aren’t quite as nice as the surface plot would be).
Is there a minimum size of the arrays which plot_surface will work on? Is there a workaround for smaller examples? I’m looking at plotting a (smallish) number of time series solutions as a surface.
Cheers, Jane.
Dr Jane Sexton Risk Research Group Geospatial and Earth Monitoring Division Geoscience Australia |
_______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel