Matplotlib: Как объединить разброс и линейный сюжет в одной записи легенды - PullRequest
2 голосов
/ 04 марта 2020

Я рисую свои точки данных с помощью ax.scatter () и соединяю точки данных с помощью метода ax.plot ().

Как создать общую запись в легенде, которая объединяет маркер для точки данных и линию подгонки? Я хочу получить запись легенды так же, как и для ax.plot(x, y, '-o', label = 'abc').

. Я создал следующий минимальный пример:

import matplotlib.pyplot as plt
import numpy as np

x_scatter = np.linspace(0,10,10)
x_line = np.linspace(0,10,100)

fig, ax = plt.subplots()

for i in range(5):
    ax.scatter(x_scatter, np.sin(x_scatter) + i, label = i)
    ax.plot(x_line, np.sin(x_line)+i)

plt.legend(loc='best')
plt.show()

1 Ответ

2 голосов
/ 04 марта 2020

Этот хак должен работать:

import matplotlib.pyplot as plt
import numpy as np

x_scatter = np.linspace(0,10,10)
x_line = np.linspace(0,10,100)

fig, ax = plt.subplots()
prop = ax._get_lines.prop_cycler

for i in range(5):
    color = next(prop)['color']
    ax.scatter(x_scatter, np.sin(x_scatter) + i, color=color)
    ax.plot(x_line, np.sin(x_line)+i, color=color)
    ax.plot([], [], '-o', color=color, label = i)

plt.legend(loc='best')
plt.show()
...