首页 > 解决方案 > Python(matplotlib):单击时突出显示 x 轴间隔

问题描述

我有一个简单的情节,包括一个滑块:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, CheckButtons


def update(val):
    x_val = x_factor.val

    p.set_data(x, func(x_val))

    fig.canvas.draw_idle()


def func(inv):
    yy = (1 / x) ** inv
    return yy


x = np.arange(400, 2501)
y = func(x)


fig = plt.figure()
ax = fig.subplots()
plt.subplots_adjust(bottom=.6)
p, = ax.plot(x, y)
plt.ylim([0, 1000])


x_slide = plt.axes([.12, .1, .65, .02])
x_factor = Slider(x_slide, 'x', valmin=-3, valmax=0, valinit=0, valstep=.01)
x_factor.on_changed(update)

plt.show()

我想在其中添加一个复选框,我可以在单击标签时在 x 轴上突出显示(也可以关闭)预定义的间隔。我认为这CheckButtons()可以解决问题,但我只找到了在单击其标签时绘制函数的示例。为了突出我使用的间隔axvspan()

def highlights_1():
    plt.axvspan(450, 515, color='brown', alpha=.25)
    plt.axvspan(525, 600, color='brown', alpha=.25)
    plt.axvspan(630, 680, color='brown', alpha=.25)
    plt.axvspan(845, 885, color='brown', alpha=.25)
    plt.axvspan(1560, 1660, color='brown', alpha=.25)
    plt.axvspan(2100, 2300, color='brown', alpha=.25)


def highlights_2():
    plt.axvspan(459.25, 525.25, color='grey', alpha=.25)
    plt.axvspan(541.40, 577.40, color='grey', alpha=.25)
    plt.axvspan(649.25, 680.25, color='grey', alpha=.25)
    plt.axvspan(2104.05, 2284.05, color='grey', alpha=.25)

我还尝试将上面链接的示例改编为我的用例。我试过了:

cbax = plt.axes([.12, 0.5, .3, 0.2])
cb = CheckButtons(cbax, 'Highlights-1', [True])
cb.on_clicked(highlights_1())

但最终以情节中的情节结束。有人知道怎么做这个吗?

标签: pythonmatplotlib

解决方案


推荐阅读