- matplotlib.pyplot.step#
- Рисуем ступенчатые, стековые, stem и точечные графики
- Ступенчатый (step) график
- Стековый график
- Stem-график
- Matplotlib. Урок 4.2. Визуализация данных. Ступенчатый, стековый, точечный график и другие
- Ступенчатый график
- Стековый график
- Stem-график
- Точечный график
- Статьи с описанием различных вариантов работы с точечными графиками
- P.S.
- Matplotlib. Урок 4.2. Визуализация данных. Ступенчатый, стековый, точечный график и другие : 1 комментарий
- Plot types#
- Basic#
- Plots of arrays and fields#
- Statistics plots#
- Unstructured coordinates#
- 3D#
matplotlib.pyplot.step#
This is just a thin wrapper around plot which changes some formatting options. Most of the concepts and parameters of plot can be used here as well.
This method uses a standard plot with a step drawstyle: The x values are the reference positions and steps extend left/right/both directions depending on where.
For the common case where you know the values and edges of the steps, use stairs instead.
1D sequence of x positions. It is assumed, but not checked, that it is uniformly increasing.
y array-like
fmt str, optional
A format string, e.g. ‘g’ for a green line. See plot for a more detailed description.
Note: While full format strings are accepted, it is recommended to only specify the color. Line styles are currently ignored (use the keyword argument linestyle instead). Markers are accepted and plotted on the given positions, however, this is a rarely needed feature for step plots.
where , default: ‘pre’
Define where the steps should be placed:
- ‘pre’: The y value is continued constantly to the left from every x position, i.e. the interval (x[i-1], x[i]] has the value y[i] .
- ‘post’: The y value is continued constantly to the right from every x position, i.e. the interval [x[i], x[i+1]) has the value y[i] .
- ‘mid’: Steps occur half-way between the x positions.
An object with labelled data. If given, provide the label names to plot in x and y.
Additional parameters are the same as those for plot .
Objects representing the plotted data.
Рисуем ступенчатые, стековые, 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(), нельзя.
В чем ценность такого графика? В научной литературе он используется для отображения изменения цифровых данных, когда каждое значение имеет строго определенный уровень. При этом, промежуточных уровней между соседними цифровыми значениями не существует. Поэтому, правильно такие данные отображать в виде ступенчатого графика. А не линейного, который, как бы намекает, что реальные данные могут быть линейно интерполированы между соседними отсчетами.
Оформление ступенчатого графика выполняется также, как и для линейного. Например, можно указать тип, цвет и маркеры в следующем виде:
Смотрите, здесь график от начальной точки сразу идет вверх. Иногда нужна другая конфигурация, противоположная. Для этого используется дополнительный параметр where с возможными значениями (по умолчанию используется ‘pre’):
Укажем второе значение ‘post’, получим изображение:
А при значении параметра where=’mid’ отсчеты располагаются по центрам ступенек.
При необходимости, мы также можем создавать несколько таких графиков в пределах одной системы координат:
ax.step(x, x, '-go', x, np.cos(x), '--x', where='mid')
То есть, использование этой функции аналогично функции plot().
Стековый график
Если нам нужно отобразить несколько наборов данных:
в виде стека (друг над другом), причем каждый следующий график является суммой предыдущих и самого себя:
,
то для этого можно воспользоваться функцией 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:
Также третьим аргументом (или параметром linefmt) можно устанавливать тип и цвет линии:
ax.stem(x, np.cos(x), '--r', bottom=0.5)
А четвертым – тип и цвет маркеров (или же с помощью параметра markerfmt):
ax.stem(x, np.cos(x), '--r', '^g', bottom=0.5)
Matplotlib. Урок 4.2. Визуализация данных. Ступенчатый, стековый, точечный график и другие
В этому уроке рассмотрим на примерах работу со ступенчатым, стековым, stem-графиком и точечным графиком.
Ступенчатый график
Рассмотрим еще одни график – ступенчатый. Такой график строится с помощью функции step() , которая принимает следующий набор параметров:
- x: array_like
- набор данных для оси абсцисс
- набор данных для оси ординат
- Задает отображение линии (см. функцию plot() ).
- метки
- Определяет место, где будет установлен шаг.
- ‘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() :
Реализуем пример, демонстрирующий работу с дополнительными параметрами:
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 или 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”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Matplotlib. Урок 4.2. Визуализация данных. Ступенчатый, стековый, точечный график и другие : 1 комментарий
Plot types#
Overview of many common plotting commands in Matplotlib.
Note that we have stripped all labels, but they are present by default. See the gallery for many more examples and the tutorials page for longer examples.
Basic#
Basic plot types, usually y versus x.
Plots of arrays and fields#
Plotting for arrays of data Z(x, y) and fields U(x, y), V(x, y) .
Statistics plots#
Plots for statistical analysis.
Unstructured coordinates#
Sometimes we collect data z at coordinates (x,y) and want to visualize as a contour. Instead of gridding the data and then using contour , we can use a triangulation algorithm and fill the triangles.
3D#
3D plots using the mpl_toolkits.mplot3d library.