我有以下here引用的代码,可以使用ax.contourf()
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
x = np.linspace(0, 1, 100)
X, Y = np.meshgrid(x, x)
Z = np.sin(X)*np.sin(Y)
levels = np.linspace(-1, 1, 40)
ax.contourf(X, Y, .1*np.sin(3*X)*np.sin(5*Y), zdir='z', levels=.1*levels)
ax.contourf(X, Y, 3+.1*np.sin(5*X)*np.sin(8*Y), zdir='z', levels=3+.1*levels)
ax.contourf(X, Y, 7+.1*np.sin(7*X)*np.sin(3*Y), zdir='z', levels=7+.1*levels)
ax.legend()
ax.set_xlim3d(0, 1)
ax.set_ylim3d(0, 1)
ax.set_zlim3d(0, 10)
输出是这样的,请注意边缘为锯齿形:
现在,我想使用圆形补丁或矩形补丁剪切堆栈,以获取平滑的边缘,例如已实现的here
但是看来set_clip_path
是Axes
的实例方法。
另一种绘制图像堆栈的方法是使用plot_surface
并将数据应用于脸色,可以找到详细信息here。这样,我们可以避免ax.contourf()
方法中所示的边缘的锯齿形影响。更好的边缘图看起来像
但是,它有缺点:
在3d情况下,是否有任何巧妙的方法可以实现剪辑版本?