Python Matplotlib - кнопки проверки и вызов функции - ошибка атрибута - PullRequest
0 голосов
/ 23 января 2020

Я хотел бы включить кнопки проверки на график, и я наткнулся на кнопки проверки Matplotlib (https://matplotlib.org/3.1.1/gallery/widgets/check_buttons.html)

Чтобы проверить и понять это, я просто поставил код по ссылке выше в новом скрипте, и он работал отлично.

Однако я хочу вызвать функцию для отображения графика. Эта функция будет вызываться из основного скрипта. Итак, я поместил этот код внутри функции. Функция написана в сценарии «test.py»:

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

def CBplot():
    t = np.arange(0.0, 2.0, 0.01)
    s0 = np.sin(2*np.pi*t)
    s1 = np.sin(4*np.pi*t)
    s2 = np.sin(6*np.pi*t)

    fig, ax = plt.subplots()
    l0, = ax.plot(t, s0, visible=False, lw=2, color='k', label='2 Hz')
    l1, = ax.plot(t, s1, lw=2, color='r', label='4 Hz')
    l2, = ax.plot(t, s2, lw=2, color='g', label='6 Hz')
    plt.subplots_adjust(left=0.2)

    lines = [l0, l1, l2]

    # Make checkbuttons with all plotted lines with correct visibility
    rax = plt.axes([0.05, 0.4, 0.1, 0.15])
    labels = [str(line.get_label()) for line in lines]
    visibility = [line.get_visible() for line in lines]
    check = CheckButtons(rax, labels, visibility)


    def func(label):
        index = labels.index(label)
        lines[index].set_visible(not lines[index].get_visible())
        plt.draw()

        check.on_clicked(func)

        plt.show()

В моем основном сценарии, называемом «MainTest.py», я написал следующее:

import test
test.CBplot()

При запуске MainTest .py, я получаю «AttributeError: модуль« test »не имеет атрибута« CBplot », когда он определенно есть, и я не могу понять, почему это происходит. Кто-нибудь знает, что я делаю неправильно?

Я работаю со Spyder и Python 3.7. Большое спасибо за вашу помощь :)

...