Matplotlib: сюжетная легенда - PullRequest
       0

Matplotlib: сюжетная легенда

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

У меня есть ситуация, когда я наносил контент на график matplotlib с отображением форм диаграммы рассеяния на тип метки.

Например:

's': "X"
'o': "Y"

Однако я построил график с сетью х. Теперь я хотел бы добавить легенду, которая отображает это отображение, и я могу изменить график с помощью plt методов.

Так что мне нужно как-то plt.legend следующее:

plt.legend(('s','o'),("X","Y"))

Но из документации не ясно, как выполнить эту задачу. Есть ли способ создать пользовательскую легенду, подобную этой, в matplotlib?

Ответы [ 2 ]

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

Из вашего вопроса не ясно, что вы имеете в виду под картированием. Если вы хотите изменить маркеры легенды с маркеров по умолчанию на маркеры пользовательских переменных, вы можете сделать следующее. Мое решение было основано на этом ответе, но было упрощено, чтобы представить простой пример. Не забудьте высказать оригинальный ответ. Я уже сделал в качестве подтверждения.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

fig, ax = plt.subplots()

new_legends = ["X", "Y"]
markers = ['s', 'o']
colors = ['r', 'b']

x = np.arange(5)
plt.plot(x, 1.5*x, marker=markers[0], color=colors[0], label='squares')
plt.plot(x, x, marker=markers[1], color=colors[1], label='circles')

_, labels = ax.get_legend_handles_labels()

def dupe_legend(label, color):
    line = Line2D([0], [0], linestyle='none', mfc='black',
                mec=color, marker=r'$\mathregular{{{}}}$'.format(label))
    return line

duplicates = [dupe_legend(leg, color) for leg, color in zip(new_legends, colors)]
ax.legend(duplicates, labels, numpoints=1, markerscale=2, fontsize=16)
plt.show()

enter image description here

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

Когда вы рисуете что-то на объекте Axis, вы можете передать аргумент ключевого слова label:

fig, ax = plt.subplots(figsize=(8, 8))

n_points = 10
x1 = np.random.rand(n_points)
y1 = np.random.rand(n_points)
x2 = np.random.rand(n_points)
y2 = np.random.rand(n_points)

ax.scatter(x1, y1, marker='x', label='X')
ax.scatter(x2, y2, marker='o', label='y')
ax.legend()

Это приводит к следующему результату:

enter image description here

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