2012-02-08 12 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()