#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
нет списка списков, поэтому я не сталкивался с этой проблемой. Рад, что все улажено, не забудьте установить его в качестве принятого ответа, чтобы закрыть поток.