Цвет легенды в Matplotlib с графиком ошибок - PullRequest
0 голосов
/ 03 мая 2018

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

Однако, похоже, он не работает для типов графиков панели ошибок. Кто-нибудь имеет представление о том, какую ручку я должен использовать, чтобы сделать это изменение?

Вот пример кода, который показывает, как он работает с элементом типа plot, но не работает с элементом типа errorbar:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0.1,4,0.5)
y1 = np.exp(-x)
y2 = np.exp(-x)*1.2+0.25

plot = plt.figure()
ax = plot.add_axes([0,0,1,1])

ax.plot(x,y1,color="red",label="Y1")
ax.errorbar(x,y2,yerr=0.1,color="blue",marker='*',capsize=4,label="Y2")

leg = ax.legend();

for line, text in zip(leg.get_lines(), leg.get_texts()):
       text.set_color(line.get_color())

А вот пример того, как выглядит этот сюжет:

Код изменит цвет текста для типов графиков, но не для типов ошибок

Спасибо за любой совет!

1 Ответ

0 голосов
/ 03 мая 2018

Метод .get_lines() дает вам строки в легенде.

[h for h in self.legendHandles if isinstance(h, Line2D)]

Панель ошибок не является Line2D. Так что в принципе вы могли бы вместо этого перебрать leg.legendHandles. Проблема в том, что цвета не очень хорошо определены. Это могут быть имена или массивы. Об этом нужно позаботиться, чтобы решение стало немного сложнее.

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0.1,4,0.5)
y1 = np.exp(-x)
y2 = np.exp(-x)*1.2+0.25

plot = plt.figure()
ax = plot.add_axes([0,0,1,1])

ax.plot(x,y1,color="red",label="Y1")
ax.errorbar(x,y2,yerr=0.1,color="blue",marker='*',capsize=4,label="Y2")

leg = ax.legend();

for artist, text in zip(leg.legendHandles, leg.get_texts()):
    col = artist.get_color()
    if isinstance(col, np.ndarray):
        col = col[0]
    text.set_color(col)

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...