Matplotlib 3d背景总是在上面

时间:2014-09-19 10:30:45

标签: python matplotlib

我试图在我的3d图中引入一个matplotlib Slider进行实时交互......

问题是,当我移动滑块时,3d表面上的背景线会保持渲染在顶部。将zorder增加到超过9000也不会有任何帮助,而且我已经尝试了一段时间解决问题,但无济于事。

代码如下,请亲自看看:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
from matplotlib.widgets import Slider, Button, RadioButtons
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')

K = 1.0

def calculate_and_plot():
    X = np.arange(-5, 5, 0.25)
    Y = np.arange(-5, 5, 0.25)
    X, Y = np.meshgrid(X, Y)
    R = np.sqrt(X**2 + Y**2)
    Z = np.sin(K*R)
    ax.cla()
    surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
        linewidth=0, antialiased=False, zorder=9001)

#Default plot
calculate_and_plot()

axcolor = 'lightgoldenrodyellow'
axs  = plt.axes([0.02,0.02, 0.7, 0.05], axisbg=axcolor)
samp = Slider(axs, 'K', 0.2, 5.0, valinit=1.0)

def update(val):
    global K
    K = samp.val
    calculate_and_plot()
    plt.draw()
samp.on_changed(update)

plt.show()

有什么想法吗?

- 编辑:

所以我找到了一个临时的,简单的解决方法,我只是在绘制更新的表面之前调用surf.remove()而不是ax.cla()(小心地绘制第一个表面,在calculate_and_plot()之外,所以我们可以保留对surf)的全局引用。也许它无论如何都是以这种方式完成的......

0 个答案:

没有答案