2012-02-08 29 views
6

初心者matplotlibユーザーはここにいます。私は、等高線図のパラメータを調整するためにスライダーを使用しようとしているが、私はそうするとき、私は得る:Matplotlib:スライダーウィジェット付き等高線図

AttributeError: QuadContourSet instance has no attribute 'set_data' 

「私は私が間違ったオブジェクトにset_dataを呼んでいると思われるが、私はすることができますの右のオブジェクトに関するドキュメントは見つかりません。手伝ってくれますか?ありがとう。ここで

は完全なコードです:

import numpy as np 
import matplotlib as mpl 
import matplotlib.mlab as mlab 
import matplotlib.pyplot as pyl 
from matplotlib.contour import QuadContourSet 
from matplotlib.widgets import Slider 

#Define display parameters 
mpl.rcParams['xtick.direction'] = 'out' 
mpl.rcParams['ytick.direction'] = 'out' 
delta = 0.025 

#Define model parameters 
alpha = .5 
beta = .5 
x_bar, a, b, c = 2, 0, 1, .1 
v = np.arange(0, 10, delta) 
w = np.arange(0, 10, delta) 

#Calculate grid values 
V, W = np.meshgrid(v,w) 
Z = (V**(beta))*(W**(1-beta)) 
X = x_bar + a + b*Z 
U = alpha*np.log(V) + (1-alpha)*np.log(X) - c*(W+V) 

# Plot 
fig = pyl.figure() 

ax = fig.add_subplot(221) 
CS = QuadContourSet(pyl.gca(), V, W, U, 200) 
pyl.clabel(CS, inline=1, fontsize=10) 
pyl.title('Simplest default with labels') 

#Define slider for alpha 
axcolor = 'lightgoldenrodyellow' 
alpha_axis = pyl.axes([0.25, 0.15, 0.65, 0.03], axisbg=axcolor) 
alpha_slider = Slider(alpha_axis, 'Amp', 0, 1, valinit=.5) 

def update(val): 
    alpha = alpha_slider.val 
    U = alpha*np.log(V) + (1-alpha)*np.log(X) - c*(W+V) 
    CS.set_data(V, W, U) 
    pyl.draw() 

alpha_slider.on_changed(update) 

pyl.show() 

答えて

3

問題は、あなたが任意のデータを変更した場合、全体のことを再計算する必要があるためQuadContourSetオブジェクトは、そのデータを更新する方法がないということです。等高線を変更する簡単な方法に役立つデータを生成する特定の方法について何かがあるかどうかはわかりませんが、そうでない場合は、ゼロから輪郭をプロットすることが必要です。

# After your "Define model parameters" block 

def compute_and_plot(ax, alpha): 
    #Calculate grid values 
    V, W = np.meshgrid(v,w) 
    Z = (V**(beta))*(W**(1-beta)) 
    X = x_bar + a + b*Z 
    U = alpha*np.log(V) + (1-alpha)*np.log(X) - c*(W+V) 

    CS = QuadContourSet(ax, V, W, U, 200) 
    pyl.clabel(CS, inline=1, fontsize=10) 

# Plot 
fig = pyl.figure() 
pyl.title('Simplest default with labels') 
ax = fig.add_subplot(221) 
compute_and_plot(ax, alpha) 

#Define slider for alpha 
axcolor = 'lightgoldenrodyellow' 
alpha_axis = pyl.axes([0.25, 0.15, 0.65, 0.03], axisbg=axcolor) 
alpha_slider = Slider(alpha_axis, 'Amp', 0, 1, valinit=.5) 

def update(ax, val): 
    alpha = alpha_slider.val 
    ax.cla() 
    compute_and_plot(ax, alpha) 
    pyl.draw() 

alpha_slider.on_changed(lambda val: update(ax, val)) 

pyl.show() 
関連する問題