2017-03-27 12 views
1

ユーザ入力に基づいて動的な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() 
+0

は、ドクター・ジョン、このようなコメント@ –

+0

を更新するために)(plt.drawをしようとすることは有用ではありません。コードには既に 'fig.canvas.draw_idle()'があります。それに加えて 'plt.draw()'を使う理由はありません。 – ImportanceOfBeingErnest

+0

申し訳ありませんが、それを見落としました。私はグラフを更新しないで同じ問題を抱えていたので、plt.draw()で解決しました。つまり、 –

答えて

1

(ある次元のデータでも同じままです)。これを行うには、set_dataを使用して2次元データを設定し、set_3d_propertiesを使用して3次元を設定する必要があります。だから、yは次のようになります更新:

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

ありがとうございます。これは私の問題を解決しました。 – Will

関連する問題