使用滑块更改变量并重新绘制Matplotlib图

我试图使用滑块来更改颜色缩放的限制,即使用set_clim(min,max)函数。我需要它,以便两个滑块控制最小值和最大值的值,并在它们更改后重新绘制图形。使用滑块更改变量并重新绘制Matplotlib图

import numpy as np 

import matplotlib.pyplot as plt

from matplotlib import cm

from matplotlib.widgets import Slider, Button

x=np.linspace(0,100,100)

y=np.linspace(0,100,100)

z=np.zeros((100,100))

for i in range (0,100):

for j in range (0,100):

z[i,j]=np.random.random()

fig, ax = plt.subplots()

plt.subplots_adjust(left=0.25, bottom=0.25)

l=plt.contourf(x,y,z)

axmax = plt.axes([0.25, 0.1, 0.65, 0.03])

axmin = plt.axes([0.25, 0.15, 0.65, 0.03])

smax = Slider(axmax, 'Max', 0, 1.0, valinit=1)

smin = Slider(axmin, 'Min', 0, 1.0, valinit=0)

def update(val):

fig.set_clim(smin.val,smax.val)

fig.canvas.draw_idle()

smax.on_changed(update)

smin.on_changed(update)

plt.show()

上面的代码给了我“AttributeError的:‘AxesSubPlot’对象有没有属性‘set_clim’”当我移动滑块虽然它不显示我的初始不变的身影。这是我第一次在python中使用小部件(或多或少是我第一次使用python),所以可能会有一些非常根本的误解。

回答:

问题是因为错误告诉你,axes对象没有set_clim函数。你想改变(这使得你在一个我预计报告错误,但)

fig.set_clim(smin.val,smax.val) 

l.set_clim(smin.val,smax.val) 

,因为你需要调用一个set_clim对象ScalarMappable上(doc)。

作为一个侧面说明,np.random.random将大小arguement所以你可以做

z = np.random.random((100, 100)) 

,而不是你的嵌套循环。

以上是 使用滑块更改变量并重新绘制Matplotlib图 的全部内容, 来源链接: utcz.com/qa/258169.html

回到顶部