Matplotlib. Урок 4.2. Визуализация данных. Ступенчатый, стековый, точечный график и другие

Автор: | 21.10.2019

В этому уроке рассмотрим на примерах работу со ступенчатым, стековым, stem-графиком и точечным графиком.

Ступенчатый график

Рассмотрим еще одни график – ступенчатый. Такой график строится с помощью функции step(), которая принимает следующий набор параметров:

  • x: array_like
    • набор данных для оси абсцисс
  • y: array_like
    • набор данных для оси ординат
  • fmt: str, optional
    • Задает отображение линии (см. функцию plot()).
  • data: indexable object, optional
    • метки
  • where : {‘pre’, ‘post’, ‘mid’}, optional, default ‘pre’
    • Определяет место, где будет установлен шаг.
      • ‘pre’: значение y ставится слева от значения x, т.е. значение y[i] определяется для интервала (x[i-1]; x[i]).
      • ‘post’: значение y ставится справа от значения x, т.е. значение y[i] определяется для интервала (x[i]; x[i+1]).
      • ‘mid’: значение y ставится в середине интервала.
x = np.arange(0, 7)
y = x

where_set = ['pre', 'post', 'mid']

fig, axs = plt.subplots(1, 3, figsize=(15, 4))

for i, ax in enumerate(axs):
  ax.step(x, y, "g-o", where=where_set[i])
  ax.grid()

Стековый график

Для построения стекового графика используется функция stackplot(). Суть его в том, что графики отображаются друг над другом, и каждый следующий является суммой предыдущего и заданного набора данных:

x = np.arange(0, 11, 1)

y1 = np.array([(-0.2)*i**2+2*i for i in x])
y2 = np.array([(-0.4)*i**2+4*i for i in x])
y3 = np.array([2*i for i in x])

labels = ["y1", "y2", "y3"]

fig, ax = plt.subplots()
ax.stackplot(x, y1, y2, y3, labels=labels)
ax.legend(loc='upper left')

Верхний край области y2 определяется как сумма значений из наборов y1 и y2, y3 – соответственно сумма y1, y2 и y3

Stem-график

Визуально этот график выглядит как набор линий от точки с координатами (x, y) до базовой линии, в верхней точке ставится маркер:

x = np.arange(0, 10.5, 0.5)
y = np.array([(-0.2)*i**2+2*i for i in x])

plt.stem(x, y)

Дополнительные параметры функции stem():

  • linefmt: str, optional
    • Стиль вертикальной линии
Символ Стиль линии
‘-‘ Сплошная линия (solid line style)
‘–‘ Штриховая линия (dashed line style)
‘-.’ Штрих-пунктирная линия (dash-dot line style)
‘:’ Штриховая линия (dotted line style)
  • markerfmt: str, optional
    • Формат маркера
Значение Описание
‘o’ Круг (Circle)
‘+’ Знак плюс (Plus sign)
‘*’ Звездочка (Asterisk)
‘.’ Точка (Point)
‘x’ Крест (Cross)
‘square’ or ‘s’ Квадрат (Square)
‘diamond’ or ‘d’ Ромб (Diamond)
‘^’ Треугольник, направленный вниз (triangle_down)
‘v’ Треугольник, направленный вверх(triangle_up)
‘<‘ Треугольник, направленный влево (triangle_left)
‘>’ Треугольник, направленный вправо (triangle_right)
‘pentagram’ or ‘p’ Пятиугольник (Five-pointed star (pentagram))
‘hexagram’ or ‘h’ Шестиугольник (Six-pointed star (hexagram))
‘none’ Нет маркера (No markers)
  • basefmt: str, optional
    • Формат базовой линии
  • bottom: float, optional, default: 0
    • y-координата базовой линии

Реализуем пример, демонстрирующий работу с дополнительными параметрами:

plt.stem(x, y, linefmt="r--", markerfmt="^", bottom=1)

Точечный график

Для отображения точечного графика предназначена функция scatter(). В простейшем виде точечный график можно получить передав функции scatter() наборы точек для x, y координат:

x = np.arange(0, 10.5, 0.5)
y = np.cos(x)

plt.scatter(x, y)

Для более детальной настройки отображения необходимо воспользоваться дополнительными параметрами функции scatter(), сигнатура ее вызова имеет следующий вид:

scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

Рассмотрим некоторые из параметров:

Параметр Тип Описание
x array_like, shape (n, ) Набор данных для оси абсцисс
y array_like, shape (n, ) Набор данных для оси ординат
s scalar или array_like, shape (n, ), optional Масштаб точек
c color, sequence, или sequence of color, optional Цвет
marker  MarkerStyle, optional Стиль точки объекта
cmap  Colormap, optional, default: None Цветовая схема
norm  Normalize, optional, default: None Нормализация данных
alpha  scalar, optional, default: None Прозрачность
linewidths  scalar или array_like, optional, default: None Ширина границы маркера
edgecolors  {‘face’, ‘none’, None} или color или sequence of color, optional. Цвет границы

Создадим решение, использующее расширенные параметры для настройки отображения графика:

x = np.arange(0, 10.5, 0.5)
y = np.cos(x)

plt.scatter(x, y, s=80, c="r", marker="D", linewidths=2, edgecolors="g")

Пример, демонстрирующий работу с цветом и размером:

import matplotlib.colors as mcolors

bc = mcolors.BASE_COLORS

x = np.arange(0, 10.5, 0.25)
y = np.cos(x)

num_set = np.random.randint(1, len(mcolors.BASE_COLORS), len(x))

sizes = num_set * 35

colors = [list(bc.keys())[i] for i in num_set]

plt.scatter(x, y, s=sizes, alpha=0.4, c=colors, linewidths=2, edgecolors="face")
plt.plot(x, y, "g--", alpha=0.4)

Статьи с описанием различных вариантов работы с точечными графиками

Создание собственных маркеров

Точный график с гистрограммой распределения

Задание отображения точек в зависимости от региона

Работа с легендой

P.S.

Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Книга: Линейная алгебра на Python
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas.  Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге Pandas. Работа с данными”.
Книга: Pandas. Работа с данными

Поделиться
Share on VK
VK
Tweet about this on Twitter
Twitter
Share on Facebook
Facebook

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *