Создание собственного маркера вертикальной линии в легенде с помощью matplotlib - PullRequest
0 голосов
/ 20 января 2019

У меня есть фигура с множеством горизонтальных линий, каждая со своим ярлыком.У меня также есть несколько вертикальных линий с метками.По умолчанию pyplot.legend () показывает эти метки с маркерами горизонтальной линии, и я хочу визуально отличить метки моей вертикальной линии от меток моей горизонтальной линии.Есть какие-нибудь идеи, как это сделать?Ниже приведена простая команда для построения линии.

plt.axvline( x=10, linestyle='-',color='black',label='vertical line')
plt.legend()

enter image description here

Также:

Мне известно об этом предложении в Легенда с вертикальной линией в matplotlib , но я не уверен, как реализовать ее для отдельной метки в легенде.

1 Ответ

0 голосов
/ 20 января 2019

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

from matplotlib import lines

fig, ax = plt.subplots()

plt.plot([0, 5], [1, 1], label='y=1')
plt.plot([0, 5], [2, 2], label='y=2')
plt.plot([0, 5], [3, 3], label='y=3')

handles, _  = ax.get_legend_handles_labels()

vertical_pos = [5, 7, 10]
colors = ['r', 'g', 'b']

for x, c in zip(vertical_pos, colors):
    plt.plot([x, x], [0, 3], color=c, label='Vertical x=%s' %x)

_, labels = ax.get_legend_handles_labels()

for c in colors:
    vertical_line = lines.Line2D([], [],  marker='|', linestyle='None', color=c,
                          markersize=10, markeredgewidth=1.5)
    handles.append(vertical_line)

plt.legend(handles, labels)

РЕДАКТИРОВАТЬ (используя axvline вместо plot)

for x, c in zip(vertical_pos, colors):
    ax_ = plt.axvline( x=x, linestyle='-', color=c, label='Vertical x=%s' %x)

_, labels = ax.get_legend_handles_labels()

for c in colors:
    vertical_line = lines.Line2D([], [],  marker='|', linestyle='None', color=c,
                          markersize=10, markeredgewidth=1.5)
    handles.append(vertical_line)

plt.legend(handles, labels)

enter image description here

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