I'm trying to make a 3d contour plot using countourf
command in Matplotlib.
Here's the variable distribution:
I'm trying to plot the contour over 3 sides of a cube:
plt.close('all')
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.pbaspect = [1.0, 1.0, 1.0]
levels = np.linspace(0,1,10)
cset = [[],[],[]]
n=0
for i in range(0,m-1):
for j in range(0,m-1):
znum[i,j]=DELTAcrit[n]
n+=1
cset[0] = ax.contourf(xnum, ynum, znum, zdir='z', offset=2*np.pi,
levels=levels,cmap='jet',antialiased=True)
for i in range(0,m-1):
for j in range(0,m-1):
znum[i,j]=DELTAcrit[n]
n+=1
cset[1] = ax.contourf(znum, xnum, ynum, zdir='x', offset=2*np.pi,
levels=levels,cmap='jet',antialiased=True)
for i in range(0,m-1):
for j in range(0,m-1):
znum[i,j]=DELTAcrit[n]
n+=1
cset[2] = ax.contourf(xnum, znum, ynum, zdir='y', offset=2*np.pi,
levels=levels,cmap='jet',antialiased=True)
# setting 3D-axis-limits:
ax.set_xlim3d(0,2*np.pi)
ax.set_ylim3d(0,2*np.pi)
ax.set_zlim3d(0,2*np.pi)
ax.set_xticks([0., .5*np.pi, np.pi, 1.5*np.pi, 2*np.pi])
ax.set_xticklabels(["$0$", r"$\frac{1}{2}\pi$",
r"$\pi$", r"$\frac{3}{2}\pi$", r"$2\pi$"])
ax.set_yticks([0., .5*np.pi, np.pi, 1.5*np.pi, 2*np.pi])
ax.set_yticklabels(["$0$", r"$\frac{1}{2}\pi$",
r"$\pi$", r"$\frac{3}{2}\pi$", r"$2\pi$"])
ax.set_zticks([0., .5*np.pi, np.pi, 1.5*np.pi, 2*np.pi])
ax.set_zticklabels(["$0$", r"$\frac{1}{2}\pi$",
r"$\pi$", r"$\frac{3}{2}\pi$", r"$2\pi$"])
ax.view_init(25, 45)
fig.subplots_adjust(bottom=-0.2,top=0.7)
cb = fig.colorbar(cset[0], shrink=0.7)
plt.show()
When I change the levels
variable to a numpy.linspace
with 3 or 5 levels it goes ok.
When I try like in the example with ten levels, like the one in the example I've just showed I got the following error:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\IPython\core\formatters.py in __call__(self, obj)
339 pass
340 else:
--> 341 return printer(obj)
342 # Finally look for special method names
343 method = get_real_method(obj, self.print_method)
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\IPython\core\pylabtools.py in <lambda>(fig)
246
247 if 'png' in formats:
--> 248 png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))
249 if 'retina' in formats or 'png2x' in formats:
250 png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs))
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\IPython\core\pylabtools.py in print_figure(fig, fmt, bbox_inches, **kwargs)
130 FigureCanvasBase(fig)
131
--> 132 fig.canvas.print_figure(bytes_io, **kw)
133 data = bytes_io.getvalue()
134 if fmt == 'svg':
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\matplotlib\backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)
2191 else suppress())
2192 with ctx:
-> 2193 self.figure.draw(renderer)
2194
2195 bbox_inches = self.figure.get_tightbbox(
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
39 renderer.start_filter()
40
---> 41 return draw(artist, renderer, *args, **kwargs)
42 finally:
43 if artist.get_agg_filter() is not None:
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\matplotlib\figure.py in draw(self, renderer)
1861
1862 self.patch.draw(renderer)
-> 1863 mimage._draw_list_compositing_images(
1864 renderer, self, artists, self.suppressComposite)
1865
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\matplotlib\image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
129 if not_composite or not has_images:
130 for a in artists:
--> 131 a.draw(renderer)
132 else:
133 # Composite any adjacent images together
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
39 renderer.start_filter()
40
---> 41 return draw(artist, renderer, *args, **kwargs)
42 finally:
43 if artist.get_agg_filter() is not None:
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py in draw(self, renderer)
443 for axis in self._get_axis_list()) + 1
444 for i, col in enumerate(
--> 445 sorted(self.collections,
446 key=lambda col: col.do_3d_projection(renderer),
447 reverse=True)):
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py in <lambda>(col)
444 for i, col in enumerate(
445 sorted(self.collections,
--> 446 key=lambda col: col.do_3d_projection(renderer),
447 reverse=True)):
448 col.zorder = zorder_offset + i
c:\users\rapha\pycharmprojects\vortexpy\venv\lib\site-packages\mpl_toolkits\mplot3d\art3d.py in do_3d_projection(self, renderer)
766 key=lambda x: x[0], reverse=True)
767
--> 768 zzs, segments_2d, self._facecolors2d, self._edgecolors2d, idxs = \
769 zip(*z_segments_2d)
770
ValueError: not enough values to unpack (expected 5, got 0)
Thanks for the help!