W3docs

Маркеры Matplotlib

Как использовать и настраивать маркеры Matplotlib в Python. Стили, размер, цвет, заливка и индивидуальное управление маркерами.

Маркеры — это символы, которые Matplotlib рисует в каждой точке данных на графике. Правильный выбор стиля маркера, а также умение изменять его размер, цвет и заливку позволяют превратить перегруженную диаграмму в понятную и информативную. На этой странице рассмотрены все доступные в Matplotlib стили маркеров, способы настройки их внешнего вида, а также случаи, когда лучше использовать plot(), а когда scatter() для индивидуального управления каждой точкой.

Что такое маркер в Matplotlib?

Маркер — это фигура, отображаемая в каждой точке (x, y) на графике. Форму фигуры задают параметром marker (или как часть строки формата). Маркеры независимы от линии, соединяющей точки данных: можно показать одно без другого.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 5, 3, 7, 4]

# Line with markers
plt.plot(x, y, marker='o')

# Markers only — no connecting line
plt.plot(x, y, marker='s', linestyle='None')

plt.show()

Все встроенные стили маркеров

Matplotlib поставляется с более чем 30 встроенными кодами маркеров. В таблице ниже перечислены наиболее часто используемые из них.

Код маркераФорма
'o'Круг
's'Квадрат
'D'Ромб
'd'Тонкий ромб
'^'Треугольник (вверх)
'v'Треугольник (вниз)
'<'Треугольник (влево)
'>'Треугольник (вправо)
'p'Пятиугольник
'h'Шестиугольник 1
'H'Шестиугольник 2
'8'Восьмиугольник
'*'Звезда
'+'Плюс
'x'Крест
'X'Заполненный крест
`''`
'_'Горизонтальная линия
'.'Точка (маленький кружок)
','Пиксель
'1'Три-вниз
'2'Три-вверх
'3'Три-влево
'4'Три-вправо
'None' или ''Без маркера

Чтобы увидеть все маркеры сразу, можно перебрать matplotlib.markers.MarkerStyle.markers:

import matplotlib.pyplot as plt
import matplotlib.markers as mmarkers

print(list(mmarkers.MarkerStyle.markers.keys()))

Использование маркеров в линейном графике

Функция plot() принимает аргумент marker. Он применяет одинаковый маркер ко всем точкам данных.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]

plt.plot(x, y, marker='o')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Line plot with circle markers')
plt.show()

Использование строки формата

Вместо отдельных именованных аргументов можно объединить стиль линии, цвет и маркер в одну строку формата: '[цвет][маркер][стиль линии]'.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]

# Red circles connected by a dashed line
plt.plot(x, y, 'ro--')
plt.title('Format string: red circles, dashed line')
plt.show()

Распространённые компоненты строки формата:

ЦветМаркерСтиль линии
'r' красный'o' круг'-' сплошная
'g' зелёный's' квадрат'--' пунктирная
'b' синий'^' треугольник':' точечная
'k' чёрный'*' звезда'-.' штрихпунктирная
'm' пурпурный'+' плюс'None' без линии

Настройка внешнего вида маркеров

Matplotlib предоставляет четыре именованных аргумента для тонкой настройки маркеров:

ПараметрЧто управляет
markersize (или ms)Диаметр маркера в пунктах
markerfacecolor (или mfc)Цвет заливки маркера
markeredgecolor (или mec)Цвет границы маркера
markeredgewidth (или mew)Ширина границы маркера в пунктах
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]

plt.plot(
    x, y,
    marker='o',
    markersize=12,
    markerfacecolor='gold',
    markeredgecolor='navy',
    markeredgewidth=2,
)
plt.title('Customized circle markers')
plt.show()

Полые маркеры

Задайте markerfacecolor='none' (строка в нижнем регистре), чтобы рисовать только границу, создавая полый маркер:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [3, 1, 4, 1, 5]

plt.plot(x, y, marker='s', markersize=14, markerfacecolor='none', markeredgecolor='steelblue', markeredgewidth=2)
plt.title('Hollow square markers')
plt.show()

Стиль заливки

Параметр fillstyle управляет тем, какая часть маркера заполняется. Допустимые значения: 'full', 'left', 'right', 'bottom', 'top' и 'none'.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 3, 5, 1]

plt.plot(x, y, marker='o', markersize=16, fillstyle='left', markerfacecolor='crimson', markeredgecolor='black')
plt.title('Half-filled circle markers (fillstyle="left")')
plt.show()

Индивидуальное управление маркерами с помощью scatter()

plot() применяет одинаковый маркер ко всей линии. Если каждая точка должна иметь разный размер или цвет — например, для отображения третьей переменной — используйте scatter().

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
sizes  = [40, 100, 200, 80, 160]   # area in points²
colors = [0.2, 0.5, 0.8, 0.3, 0.9]  # mapped through colormap

sc = plt.scatter(x, y, s=sizes, c=colors, cmap='plasma', edgecolors='black')
plt.colorbar(sc, label='Value')
plt.title('Per-point size and color with scatter()')
plt.show()

Ключевые различия между plot() и scatter() для маркеров:

Возможностьplot()scatter()
Форма маркераОдинакова для всех точекОдинакова для всех точек
Размер маркераЕдиныйДля каждой точки (array s)
Цвет маркераЕдиныйДля каждой точки (array c + цветовая карта)
Производительность на больших данныхБыстрееМедленнее

Несколько серий данных с разными маркерами

Используйте отдельные вызовы plot(), чтобы назначить уникальный маркер каждой серии, затем добавьте легенду:

import matplotlib.pyplot as plt

months = [1, 2, 3, 4, 5, 6]
product_a = [120, 135, 110, 150, 140, 160]
product_b = [80,  95, 100,  90, 115, 130]
product_c = [60,  70,  65,  85,  90,  95]

plt.plot(months, product_a, marker='o', label='Product A')
plt.plot(months, product_b, marker='s', label='Product B')
plt.plot(months, product_c, marker='^', label='Product C')

plt.xlabel('Month')
plt.ylabel('Units sold')
plt.title('Monthly sales by product')
plt.legend()
plt.show()

Маркеры без соединяющей линии

Передача linestyle='None' (или ls='None') убирает линию и оставляет только маркеры — фактически это точечный график, построенный с помощью plot().

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [3, 1, 4, 1, 5, 9, 2, 6]

plt.plot(x, y, marker='D', linestyle='None', color='darkorange', markersize=10)
plt.title('Diamond markers, no line')
plt.show()

Этот подход удобен, когда порядок точек данных важен (сохраняется исходный порядок x), но линия, намекающая на непрерывную тенденцию, нежелательна.

Практические советы

  • Подбирайте маркер под плотность данных. При построении тысяч точек используйте мелкие маркеры ('.' или ','); для небольшого числа измерений подойдут крупные формы ('o', 's').
  • Следите за контрастностью. На белом фоне тёмный markeredgecolor на светлом markerfacecolor делает каждую точку хорошо различимой даже при малом размере.
  • Не перегружайте один график. Более пяти различных форм маркеров на одной диаграмме делают легенду трудночитаемой — рассмотрите использование подграфиков или различных цветов.
  • Используйте scatter() для кодирования третьей переменной. Arrays размеров или цветов, отображённые через цветовую карту, передают дополнительное измерение, не добавляя новые серии в легенду.

Связанные темы

Was this page helpful?