Функция plot() в Matplotlib


Справочная документация Matplotlib

plot()Это основная функция в Matplotlib, используемая для построения линейных графиков.

Она создаёт линии, соединяя заданные точки с координатами x и y, и поддерживает настройку цвета, стиля линии, маркера и толщины линии.

Определение функции

Интерфейс pyplot

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

Интерфейс Axes

Axes.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

Описание параметра

ПараметрTypeОписание
*argsПеременные аргументыПоддерживает несколько вариантов вызова: plot(y), plot(x, y), plot(x, y, 'fmt'), plot(x1, y1, 'fmt1', x2, y2, 'fmt2', ...)
scalex / scaleyboolУказывает, следует ли автоматически масштабировать оси x/y для соответствия данным; по умолчанию — True
dataИндексируемый объектЕсли указано, строки можно использовать как аргументы для ссылки на столбцы данных в нём.
color или ccolorЦвет линии, например, 'red', '#ff0000', 'tab:blue'
linestyle или lsstrСтиль линии: '-' (сплошная), '--' (штриховая), '-.' (штрихпунктирная), ':' (точечная), '' (без линии)
linewidth или lwfloatШирина линии, по умолчанию примерно 1.5
markerstrМаркеры точек данных: '.', 'o', 's', '^', '*', '+' (знак плюс), 'x' и т. д.
markersize или msfloatРазмер маркера
labelstrПодпись легенды, используется с legend()
альфаfloatПрозрачность, от 0 (полностью прозрачный) до 1 (полностью непрозрачный)
zorderfloatПорядок слоёв: чем больше значение, тем выше он отрисовывается

Строка формата fmt состоит из трёх частей:'[Color][Marker][Line Style]'например,'ro--'обозначает красный цвет, маркер в виде круга, штриховую линию. Порядок частей произвольный.

Распространённые сокращения цветов

СимволЦветСимволЦвет
'b'Синий'r'Красный
'g'Зелёный'c'Циан
'm'Magenta'y'Жёлтый
'k'Чёрный'w'Белый

Примеры использования

Пример 1: Простейший линейный график

Если переданы только значения y, x автоматически использует индексы, начиная с 0.

Пример

import matplotlib.pyplot as plt
import numpy as np

# Сгенерировать 50 точек данных в диапазоне 0-10
x = np.linspace(0, 10, 50)
y = np.sin(x)  # Функция синуса

# Простейший вызов: x, y
plt.plot(x, y)

plt.title('Простой линейный график')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.grid(True, alpha=0.3)
plt.show()

Пример 2: несколько кривых + строка формата

Нарисуйте несколько кривых на одном графике, используя разные цвета, стили линий и маркеры.

Пример

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 50)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * np.exp(-x / 3)  # Затухающая синусоида

# Несколько кривых, каждая с разным форматом
plt.plot(x, y1, 'b-o', label='sin(x)')           # Синяя сплошная линия + круглые маркеры
plt.plot(x, y2, 'r--s', label='cos(x)')          # Красная штриховая линия + квадратные маркеры
plt.plot(x, y3, 'g-.^', label='затухающий sin(x)')   # Зелёная штрихпунктирная линия + треугольные маркеры

plt.title('Несколько линий с разными стилями')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

Пример 3: Настройка стиля с помощью именованных аргументов

Используйте именованные аргументы для более тонкого контроля над внешним видом линии.

Пример

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)

fig, ax = plt.subplots(figsize=(8, 4), layout='constrained')

# Используйте именованные аргументы вместо строки формата, это читабельнее
ax.plot(x, np.sin(x),
        color='steelblue',        # Название цвета
        linestyle='-',            # Сплошная линия
        linewidth=2.5,            # Толщина линии
        marker='o',               # Круговой маркер
        markersize=4,             # Размер маркера
        markerfacecolor='red',    # Цвет заливки маркера
        markeredgecolor='black',  # Цвет границы маркера
        markeredgewidth=0.5,      # Ширина границы маркера
        alpha=0.8,                # Общая прозрачность
        label='sin(x)')

# Сравнение: штриховая линия без маркеров
ax.plot(x, np.cos(x),
        color='#ff6600',          # Шестнадцатеричный цвет
        linestyle='--',
        linewidth=2,
        label='cos(x)')

ax.set_title('Настроенные стили линий', fontsize=14)
ax.set_xlabel('x (радианы)')
ax.set_ylabel('Амплитуда')
ax.legend(loc='upper right')
ax.grid(True, alpha=0.2)
plt.show()
print("пример: настроенный график отображён")

Пример 4: Использование параметра data (поддержка DataFrame)

Когда data является dict или pandas DataFrame, можно использовать строковые имена столбцов.

Пример

import matplotlib.pyplot as plt
import numpy as np

# Организуйте данные в виде словаря
data = {
    'time': np.arange(0, 10, 0.5),
    'voltage': np.sin(np.arange(0, 10, 0.5)) * 5 + 10,
    'current': np.cos(np.arange(0, 10, 0.5)) * 2 + 5,
}

fig, ax = plt.subplots(layout='constrained')

# Обращение к данным через параметр data + строковые имена столбцов
ax.plot('time', 'voltage', 'b-', data=data, label='Напряжение (V)')
ax.plot('time', 'current', 'r--', data=data, label='Ток (A)')

ax.set_title('Использование параметра data с именами столбцов')
ax.set_xlabel('Время (s)')
ax.set_ylabel('Значение')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Пример 5: Вызов на объекте Axes (рекомендуемый подход)

Использование объектно-ориентированного интерфейса Axes нагляднее в сценариях с несколькими подграфиками.

Пример

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

# Создать два подграфика рядом
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
                                layout='constrained')

# Левый подграфик: математическая функция
ax1.plot(x, np.sin(x), label='sin(x)')
ax1.plot(x, np.cos(x), label='cos(x)')
ax1.set_title('Математические функции')
ax1.legend()
ax1.grid(True, alpha=0.3)

# Правый подграфик: тренд данных
data = np.random.randn(100).cumsum()  # Случайное блуждание
ax2.plot(data, color='teal', linewidth=1.5)
ax2.set_title('Случайное блуждание (накопленная сумма)')
ax2.set_xlabel('Шаг')
ax2.set_ylabel('Позиция')
ax2.grid(True, alpha=0.3)

plt.show()

ЧАВО

Порядок x и y в plot()

Стандартный вызов —plot(x, y), x идёт первым, y — после.

Если передан только один массив, напримерplot(y), то x автоматически принимается какrange(0, len(y))。

Как нарисовать разрывные отрезки линий?

Для данных, содержащих NaN, plot() автоматически разрывает линию на NaN, что можно использовать для рисования сегментированных линий.

Можно ли использовать строку fmt и именованные аргументы вместе?

Да, именованные аргументы переопределяют соответствующие настройки в строке fmt. Напримерplot(x, y, 'ro', color='blue')Здесь marker='o' берётся из fmt, но color будет переопределён на blue.


Справочная документация Matplotlib

Другие расширения