Matplotlib: contour plot with slider widget(Matplotlib:带有滑块小部件的等高线图)
问题描述
新手 matplotlib 用户在这里.我正在尝试使用滑块来调整等高线图中的参数,但是当我这样做时,我得到:
Newbie matplotlib user here. I'm trying to use a slider to adjust a parameter in a contour plot, but when I do so, I get:
AttributeError: QuadContourSet instance has no attribute 'set_data'
我怀疑我在错误的对象上调用 set_data,但我找不到任何关于 right 对象是什么的文档.你能帮我吗?谢谢.
I suspect that I'm calling set_data on the wrong object, but I can't find any documentation on what the right object is. Can you help? Thanks.
这是完整的代码:
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()
推荐答案
问题是 QuadContourSet 对象没有办法更新它的数据,因为如果你随意更改数据,整个事情都需要重新计算.我不知道您生成数据的特定方式是否有助于以更简单的方式修改等高线,但如果没有,我认为您需要做的是从头开始绘制等高线:
The problem is that the QuadContourSet object has no way to update its data, since if you change the data arbitrarily, the whole thing needs to be recomputed. I don't know if there is something about your particular way of generating data that would lend itself to a simpler way to modify the contour lines, but if not, I think what you need to do is to plot the contours from scratch:
# 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()
这篇关于Matplotlib:带有滑块小部件的等高线图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Matplotlib:带有滑块小部件的等高线图


基础教程推荐
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 筛选NumPy数组 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01