ユーザ入力に基づいて動的な3Dグラフを作成するためにmatplotlibを取得しようとしていますが、グラフを更新することができません。まったく同じコードを使用し、 "projection = '3d'"設定を使わないと、プログラムは正常に動作しますが、グラフが3dに表示されるとすぐには機能しません。リアルタイムユーザ入力に基づくMatplotlib 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()
3Dケースのラインが全て3次元で更新する必要が2Dグラフコード(グラフの更新適切に)
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()
は、ドクター・ジョン、このようなコメント@ –
を更新するために)(plt.drawをしようとすることは有用ではありません。コードには既に 'fig.canvas.draw_idle()'があります。それに加えて 'plt.draw()'を使う理由はありません。 – ImportanceOfBeingErnest
申し訳ありませんが、それを見落としました。私はグラフを更新しないで同じ問題を抱えていたので、plt.draw()で解決しました。つまり、 –