基于实时用户输入更新Matplotlib 3D图形

基于实时用户输入更新Matplotlib 3D图形,matplotlib,3d,widget,slider,python-3.4,Matplotlib,3d,Widget,Slider,Python 3.4,我正试图让matplotlib根据用户输入创建一个动态3d图形,但无法更新图形。如果我使用完全相同的代码,但没有“projection='3d'”设置,程序工作正常-但一旦图形更改为以3d显示-它就不工作 任何帮助都将不胜感激 三维图形代码(图形不更新) 二维图形代码(图形正确更新) 3D案例中的线需要在所有3个维度中更新(即使某些维度中的数据保持不变)。为此,必须使用set_data设置二维数据,使用set_3d_properties设置三维数据。因此,更新y将如下所示: l.set_data

我正试图让matplotlib根据用户输入创建一个动态3d图形,但无法更新图形。如果我使用完全相同的代码,但没有“projection='3d'”设置,程序工作正常-但一旦图形更改为以3d显示-它就不工作

任何帮助都将不胜感激

三维图形代码(图形不更新)

二维图形代码(图形正确更新)


3D案例中的线需要在所有3个维度中更新(即使某些维度中的数据保持不变)。为此,必须使用
set_data
设置二维数据,使用
set_3d_properties
设置三维数据。因此,更新
y
将如下所示:

l.set_data(x, a*x+b)
l.set_3d_properties(z)

尝试plt.draw()来update@Dr.John这些评论毫无帮助。代码中已经有
fig.canvas.draw\u idle()
,除此之外,没有理由使用
plt.draw()
。抱歉,忽略了它。我在不更新图形时遇到了同样的问题,并用plt.draw()解决了这个问题,这就是原因
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111)

plt.subplots_adjust(left=0.25, bottom=0.25)

x = np.arange(0.0, 1.0, 0.1)
a0 = 5
b0 = 1
y = a0 * x + b0

l, = plt.plot(x, y)

# Set size of Axes
plt.axis([0, 1, -10, 10])

# Place Sliders on Graph
ax_a = plt.axes([0.25, 0.1, 0.65, 0.03])
ax_b = plt.axes([0.25, 0.15, 0.65, 0.03])

# Create Sliders & Determine Range
sa = Slider(ax_a, 'a', 0, 10.0, valinit=a0)
sb = Slider(ax_b, 'b', 0, 10.0, valinit=b0)


def update(val):
    a = sa.val
    b = sb.val
    l.set_ydata(a*x+b)
    fig.canvas.draw_idle()

sa.on_changed(update)
sb.on_changed(update)

plt.show()
l.set_data(x, a*x+b)
l.set_3d_properties(z)