Рисуем ступенчатые, стековые, stem и точечные графики

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

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

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

import numpy as np
import matplotlib.pyplot as plt
 
fig = plt.figure(figsize=(4, 4))
ax = fig.add_subplot()
 
x = np.arange(0, 10)
ax.step(x, x)
ax.grid()
 
plt.show()

Обратите внимание, мы здесь обязательно должны передать список и для координаты x и для координаты y. Передавать только значения для y, как это было в функции plot(), нельзя.

В чем ценность такого графика? В научной литературе он используется для отображения изменения цифровых данных, когда каждое значение имеет строго определенный уровень. При этом, промежуточных уровней между соседними цифровыми значениями не существует. Поэтому, правильно такие данные отображать в виде ступенчатого графика. А не линейного, который, как бы намекает, что реальные данные могут быть линейно интерполированы между соседними отсчетами.

Оформление ступенчатого графика выполняется также, как и для линейного. Например, можно указать тип, цвет и маркеры в следующем виде:

ax.step(x, x, '-go')

Получим изображение:

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

where = {'pre',  'post',  'mid'}

Укажем второе значение 'post', получим изображение:

ax.step(x, x, '-go', where='post')

А при значении параметра where='mid' отсчеты располагаются по центрам ступенек.

При необходимости, мы также можем создавать несколько таких графиков в пределах одной системы координат:

ax.step(x, x, '-go', x, np.cos(x), '--x', where='mid')

То есть, использование этой функции аналогично функции plot().

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

Если нам нужно отобразить несколько наборов данных:

y1, y2, y3, …,

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

,

то для этого можно воспользоваться функцией stackplot():

x = np.arange(-2, 2, 0.1)
y1 = np.array([-y**2 for y in x]) + 8
y2 = np.array([-y**2 for y in x]) + 8
y3 = np.array([-y**2 for y in x]) + 8
ax.stackplot(x, y1, y2, y3)

Stem-график

Если нам нужно отобразить данные в виде отдельных точек, соединенных линией с некоторым базовым уровнем, то можно воспользоваться функцией stem():

x = np.arange(-np.pi, np.pi, 0.3)
ax.stem(x, np.cos(x))

По умолчанию уровень базовой линии находится в нуле. Но мы можем его изменить, указав значение через параметр bottom:

ax.stem(x, np.cos(x), bottom=0.5)

Также третьим аргументом (или параметром linefmt) можно устанавливать тип и цвет линии:

ax.stem(x, np.cos(x), '--r', bottom=0.5)

А четвертым – тип и цвет маркеров (или же с помощью параметра markerfmt):

ax.stem(x, np.cos(x), '--r', '^g', bottom=0.5)

В качестве маркеров можно использовать следующие символы:

Символ

Описание

'o'

круг

'+'

плюс

'*'

звездочка

'x'

крест

'.'

точка

's' или 'square'

квадрат

'd' или 'diamond'

ромб

'^'

треугольник вверх

'v'

треугольник вниз

'<'

треугольник влево

'>'

треугольник вправо

'p' или 'pentagram'

пятиугольник

'h' или 'hexagram'

шестиугольник

'none'

сокрытие маркера

Наконец, с помощью пятого параметра (или именованного параметра basefmt) можно задавать цвет и стиль базовой линии:

ax.stem(x, np.cos(x), '--r', '^g', ':', bottom=0.5)

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

Следующий интересный график – это отображение данных в виде набора точек. Например, такая визуализация используется для получения картины разброса случайных данных (величин). Предположим, генерируем 500 нормальных случайных величин для осей x и y:

x = np.random.normal(0, 2, 500)
y = np.random.normal(0, 2, 500)

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

ax.scatter(x, y)

У этой функции имеются дополнительные параметры для визуальной настройки формируемого графика:

Параметр

Описание

s

масштаб точек (число)

c или color

цвет точек

cmap

цветовая схема

alpha

степень прозрачности

linewidths

толщина граничной линии (вокруг точек)

edgecolor

цвет границы

marker

тип маркера

Например, можно сформировать вот такой вид этого графика:

ax.scatter(x, y, s=50, c='g', linewidths=1, marker='s', edgecolors='r')

Все рассмотренные типы графиков на этом занятии:

  • ступенчатый (stem);
  • стековый (stackplot);
  • stem-график;
  • точечный (scatter)

можно оформлять по аналогии с графиком plot(), о котором мы говорили на предыдущих занятиях. Также добавлять различные надписи, работать с сеткой, задавать типы координатных осей, делать визуальное оформление и т.п. На следующем занятии мы продолжим эту тему и рассмотрим построение гистограмм, столбчатых и круговых диаграмм.