如何从单选按钮中选择项目时更新axvspan

时间:2017-11-01 02:31:19

标签: python pandas matplotlib widget

我有一个图表,用户可以点击单选按钮,使用axvspan对象突出显示部分图表。这适用于第一次选择,但每个附加选择将只绘制另一个axvspan对象而不是更新现有对象。

这是我创建的简化版本:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import RadioButtons

fig, ax = plt.subplots()

y = [1,2,3,4,5,6,7,8,9,10]
ax.plot(y)
ax.axis([0,10,0,10])

plt.subplots_adjust(left=0.2)

rax = plt.axes([.01, 0.55, 0.15, 0.3], aspect='equal',frameon=False )
radio = RadioButtons(rax, y)
for circle in radio.circles:
    circle.set_radius(0.02)
def update(label):
    num = int(label)
    ax.axvspan(num, num+1, alpha=0.3, color='xkcd:crimson')
    plt.draw()

radio.on_clicked(update)
plt.show()

1 个答案:

答案 0 :(得分:0)

您可以跟踪现有的axvspan,并在每次调用remove()时使用update()方法:

spans = []

def update(label):
    num = int(label)
    if len(spans):
        for span in spans:
            try:
                span.remove()
            except ValueError:
                continue
    spans.append(ax.axvspan(num, num+1, alpha=0.3, color='xkcd:crimson'))
    plt.draw()

radio.on_clicked(update)
plt.show()