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

时间:2013-10-11 15:43:29

标签: python matplotlib widget

我正在尝试使用滑块更改颜色缩放的限制,即使用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),所以可能存在一些非常根本的误解。

1 个答案:

答案 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))

而不是嵌套循环。