我想模拟'绘图中两个对象的位置。我希望用axvspan
执行此操作。我想用滑块移动一个axvspan
。我想做像我这样的事情:
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
t = 2
g0 = 10
filter_loc, = plt.axvspan((50-g0-t), (50-g0), color = "blue")
sensor_loc = plt.axvspan(50,80, color="red")
plt.axis([0, 1, -10, 10])
axgap = plt.axes([0.25, 0.1, 0.65, 0.03])
sgap = Slider(axgap, 'Gap', 0.01, 30.0, valinit=g0)
def update(val):
gap = sgap.val
filter_loc.set_xdata(50-gap-t,50-gap)
fig.canvas.draw_idle()
sgap.on_changed(update)
plt.show()
以多种方式尝试时,我总会收到错误:
filter_loc, = plt.axvspan((50-g0-t), (50-g0))
TypeError: 'Polygon' object is not iterable
所以在我看来,axvspan不喜欢使用滑块更新值。有没有办法通过使用axvspan来实现这个目标?
答案 0 :(得分:2)
filter_loc
之后你还有一个额外的逗号。
除此之外,filter_loc
没有set_xdata
属性。您可以通过调用set_xy()
来修改它,例如:类似这样的内容:
def set_xvalues(polygon, x0, x1):
_ndarray = polygon.get_xy()
_ndarray[:, 0] = [x0, x0, x1, x1, x0]
polygon.set_xy(_ndarray)
def update(val):
gap = sgap.val
set_xvalues(filter_loc, 50-gap-t, 50-gap)
fig.canvas.draw_idle()
BTW当前plt.axis()
值阻止显示蓝色方块。