使用matplotlib更新“axvspan”的位置

2024-10-01 00:30:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想“模拟”一个图中两个物体的位置。我想用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()

当我尝试几种方法时,我总是得到错误:

^{pr2}$

所以在我看来,axvspan不喜欢使用滑块更新值。有没有其他方法可以通过使用axvspan来实现这一点?在


Tags: importmatplotlibfigpltfilterloccolorslider
1条回答
网友
1楼 · 发布于 2024-10-01 00:30:56

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()

顺便说一句,当前的plt.axis()值阻止了蓝色方块的显示。在

相关问题 更多 >