根据实时用户输入更新 Matplotlib 3D 图形



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

任何帮助将不胜感激。

3D 图形代码(图形不更新(

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, projection='3d')
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
z = np.zeros(10)
l, = plt.plot(x, y, z)
# 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()

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

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()

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

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

最新更新