Раскраска текста контрольных кнопок в matplotlib

#python #matplotlib

#python #matplotlib

Вопрос:

Мне нужно добавить флажок в диаграмму python, чтобы проверить, какие строки должны отображаться или скрываться.

Я нашел приведенный ниже код, который работает просто отлично, за исключением одной детали, которую мне досадно сложно выяснить, у меня уже есть несколько недель с тех пор, как я пытаюсь это сделать: помимо флажков и названий серий, я хотел бы также иметь цвета строк рядом с текстом,чтобы иметь возможность визуально определить, какая строка является какой серией.

Первоначально я пытался показать легенду над текстом рядом с флажками, но легенда переместилась бы, если бы окно было изменено, а это было бы невозможно реализовать.

Я чувствую, что должен быть способ добавить отображение цветов строк в функцию, которая создает флажки, может кто-нибудь дать мне несколько советов о том, как это сделать? Функция:

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

Ссылка с полным кодом:

https://matplotlib.org/3.1.0/gallery/widgets/check_buttons.html

Ответ №1:

 for idx, text in enumerate(check.labels):
    text.set_color(lines[idx].get_color())
  

Добавьте этот фрагмент кода после создания экземпляра CheckButtons . Он будет окрашивать текст так, как вы этого хотите.

Старое, худшее решение:

labels = [str(line.get_label()) ", " str(line.get_color()) for line in lines]

Комментарии:

1. Спасибо за этот ответ. Но, похоже, это не работает. С помощью инструкции «for» я получаю сообщение об ошибке «AttributeError: объект ‘list’ не имеет атрибута ‘get_color'», а с помощью «старого, худшего решения» он записывает цветовой код рядом с метками. Тем не менее, это привело меня к хорошему результату, я посмотрю, смогу ли я решить любую из 2 ошибок. Но у меня это работает.

2. Но у меня это работает. Я добавлю здесь решение, надеюсь, оно понято, на случай, если у кого-то еще возникнет эта ошибка: список «lines» состоял из списков, каждая строка представляла собой список с одним элементом. Итак, я составил список STR из списка, используя приведенный ниже код: flat_lines = [элемент для подсписка в строках для элемента в подсписке] Затем использовал flat_lines в коде вместо «обычных» строк.

3. @AndreiUngurean Мой код работает с приведенным вами примером; в нем lines нет списка списков, поэтому я не сталкивался с этой проблемой. Рад, что все улажено, не забудьте установить его в качестве принятого ответа, чтобы закрыть поток.