使用滑块更改变量并重新绘制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