Несколько линий и легенда
Один график редко отвечает на вопрос. Интереснее сравнивать: продажи двух магазинов, температуру в разных городах, план и факт. Для этого на одном графике рисуют несколько линий и добавляют легенду.
Несколько линий
Каждый вызов plt.plot добавляет линию на тот же график:
import matplotlib.pyplot as plt
days = [1, 2, 3, 4, 5]
plt.plot(days, [3, 5, 4, 6, 8])
plt.plot(days, [2, 2, 5, 5, 7])
Если цвет не указан, matplotlib сам выбирает цвета по очереди: синий, оранжевый, зелёный, красный… Порядок линий на графике — это порядок вызовов plot.
Подписи и легенда
Чтобы было понятно, где какая линия, каждой дают подпись label, а потом вызывают plt.legend():
plt.plot(days, [3, 5, 4, 6, 8], label="Магазин А")
plt.plot(days, [2, 2, 5, 5, 7], label="Магазин Б")
plt.legend()
Легенда перечисляет линии в порядке их добавления. Положение можно указать: plt.legend(loc="upper left"); по умолчанию matplotlib сам ищет свободное место.
Линии в цикле
Если линий много, их рисуют в цикле — по одной на каждую строку данных:
data = {
"Пн": [5, 6, 7],
"Вт": [4, 6, 9],
"Ср": [6, 6, 6],
}
for name, values in data.items():
plt.plot([1, 2, 3], values, label=name)
plt.legend()
Разные стили для сравнения
Когда линий две-три, их удобно различать не только цветом, но и стилем — это помогает и при печати в чёрно-белом:
plt.plot(days, plan, color="gray", linestyle="--", label="План")
plt.plot(days, fact, color="tab:blue", marker="o", label="Факт")
Горизонтальные и вертикальные линии
Уровни — норму, порог, среднее — отмечают линиями через весь график:
plt.axhline(5, color="red", linestyle=":", label="Норма") # горизонтальная на y = 5
plt.axvline(3, color="gray") # вертикальная на x = 3
Такие линии тоже попадают в легенду, если у них есть label.
Подписи точек
Иногда нужно подписать отдельные точки:
plt.plot(days, sales)
plt.annotate("рекорд", xy=(5, 8), xytext=(3.5, 8.5),
arrowprops={"arrowstyle": "->"})
plt.text(1, 3, "старт")
text ставит надпись в точку, annotate — надпись со стрелкой к точке xy.
Итог
- каждый
plt.plotдобавляет линию на тот же график, цвета чередуются автоматически; label="..."у линии иplt.legend()— легенда в порядке добавления линий;- много линий удобно рисовать в цикле;
axhline(y),axvline(x)— горизонтальная и вертикальная линии через весь график;text,annotate— подписи точек.