1
我想在mplot3d表面下得到一个很好的contourf图。 我希望它出现在3D轴立方体的地板上,并与我的数据下限有一点偏移。 现在我在做这样的事情:mplot3d:contourf偏移量,限制和刻度
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
N = 50
fig = plt.figure()
ax = fig.gca(projection='3d')
surface = np.zeros((N,N))
# gaussian
for x in np.arange(N, dtype=float):
for y in np.arange(N, dtype=float):
sigma = 0.2
xn = (x - N/2)/N
yn = (y - N/2)/N
r = np.sqrt(xn**2.0 + yn**2.0)
surface[x,y] = np.exp((-r**2.0)/(2.0*sigma**2.0))
# mesh grid NxN points in [0,1]
gx, gy = np.meshgrid(np.linspace(0,1,N),np.linspace(0,1,N))
ax.plot_surface(gx, gy, surface, rstride=2, cstride=2, cmap=mpl.cm.Spectral)
# extend z axis limit to make room for contourf
ax.set_zlim3d(np.min(surface) - 0.5, np.max(surface))
# contour on the floor
levels = np.linspace(np.min(surface), np.max(surface), 20)
ax.contourf(gx, gy, surface, levels=levels,
offset=(np.min(surface) - 0.5), cmap=mpl.cm.Spectral)
这看起来不错,但它增加了一些,我的数据最低下延长z轴的刻度。我不希望在最小值以下显示任何刻度,但仍然延长zaxis以抵消contourf图。
有什么想法?我该如何隐藏或不画所有红色圆圈蜱?
'ax.get_zticks','ax.set_zticks' – gboffi
'numpy'允许矢量表达式,如'的x,y = np.meshgrid(np.linspace(0,1,N) - 0.5,NP .linspace(0,1,N)-0.5)'和'surface = np.exp( - (x ** 2 + y ** 2)/ 0.08)' – gboffi
感谢@gboffi这工作'ax.set_zticks(filter lambda x:s_min <= x <= s_max,ax.get_zticks()))' – filippo