我正在尝试使用滑块更改颜色缩放的限制,即使用set_clim(min,max)函数。我想要它,以便两个滑块控制最小值和最大值的值,并在它们更改后重新绘制图形。
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),所以可能存在一些非常根本的误解。
答案 0 :(得分:3)
问题在于错误告诉您,axes
个对象没有set_clim
功能。你想要改变(这会使你报告的错误报告我想要的,但是)
fig.set_clim(smin.val,smax.val)
到
l.set_clim(smin.val,smax.val)
因为您需要在set_clim
对象(doc)上致电ScalarMappable
。
作为旁注,np.random.random
需要一个大小的争论,所以你可以做
z = np.random.random((100, 100))
而不是嵌套循环。