Matplotlib: как раскрасить диаграмму рассеяния по значению

Часто вы можете захотеть затенить цвет точек на диаграмме рассеяния matplotlib на основе какой-то третьей переменной. К счастью, это легко сделать с помощью функции matplotlib.pyplot.scatter() , которая имеет следующий синтаксис:
matplotlib.pyplot.scatter (x, y, s = нет, c = нет, cmap = нет)
- x: Массив значений, используемых для координат оси X на графике.
- y: Массив значений, используемых для координат оси Y на графике.
- s: Размер маркера.
- c: Массив значений для цветов маркеров.
- cmap: карта цветов для использования в графике.
Вы можете использовать c , чтобы указать переменную, которая будет использоваться для значений цвета, и вы можете использовать cmap , чтобы указать фактические цвета, которые будут использоваться для маркеров на диаграмме рассеивания.
В этом руководстве объясняется несколько примеров использования этой функции на практике.
Пример 1: цвет точек диаграммы рассеяния по значению
Предположим, у нас есть следующие Pandas DataFrame:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df x y z 0 25 5 3 1 12 7 4 2 15 7 4 3 14 9 5 4 19 12 7 5 23 9 8 6 25 9 8 7 29 4 9
В следующем коде показано, как создать диаграмму рассеивания с использованием карты оттенков серого и значений переменной z в качестве оттенка для карты цветов:
import matplotlib.pyplot as plt #create scatterplot plt.scatter (df.x, df.y, s=200, c=df.z, cmap='gray')

Для этого конкретного примера мы выбрали цветовую карту «серый», но вы можете найти полный список цветовых карт, доступных для использования, в документации по цветовой карте matplotlib .
Например, вместо этого мы могли бы указать «Зеленые» в качестве цветовой карты:
plt.scatter (df.x, df.y, s=200, c=df.z, cmap='Greens')

По умолчанию маркеры с большими значениями аргумента c затемняются темнее, но вы можете изменить это, просто добавив _r к имени cmap:
plt.scatter (df.x, df.y, s=200, c=df.z, cmap='Greens_r')

Пример 2. Цвет точек на диаграмме рассеяния по категориям
Предположим, у нас есть следующие Pandas DataFrame:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df x y z 0 25 5 A 1 12 7 A 2 15 7 B 3 14 9 B 4 19 12 B 5 23 9 C 6 25 9 C 7 29 4 C
В следующем коде показано, как создать диаграмму рассеяния, используя переменную z для окрашивания маркеров в зависимости от категории:
import matplotlib.pyplot as plt groups = df.groupby('z') for name, group in groups: plt.plot (group.x, group.y, marker='o', linestyle='', markersize=12, label=name) plt.legend()

Вы можете найти больше руководств по Python здесь .
Как сделать диаграмму рассеяния из фрейма данных Pandas

Есть два способа создать диаграмму рассеяния, используя данные из pandas DataFrame:
1. Используйте pandas.DataFrame.plot.scatter
Один из способов создать диаграмму рассеяния — использовать встроенную функцию Pandas plot.scatter() :
import pandas as pd df.plot.scatter (x = 'x_column_name', y = 'y_columnn_name')
2. Используйте matplotlib.pyplot.scatter
Другой способ создать диаграмму рассеивания — использовать функцию Matplotlib pyplot.scatter() :
import matplotlib.pyplot as plt plt.scatter (df.x, df.y)
В этом руководстве приведены примеры использования каждого из этих методов.
Пример 1: использование панд
В следующем коде показано, как использовать функцию plot.scatter() для создания простой диаграммы рассеяния:
import pandas as pd #create DataFrame df = pd.DataFrame() #create scatterplot df.plot.scatter (x='x', y='y')

Обратите внимание, что вы можете использовать аргументы s и c для изменения размера и цвета точек соответственно:
df.plot.scatter (x='x', y='y', s= 60 , c='green')

Пример 2: Используйте Matplotlib
В следующем коде показано, как использовать функцию pyplot.scatter() для создания диаграммы рассеяния:
import pandas as pd import matplotlib.pyplot as plt #create DataFrame df = pd.DataFrame() #create scatterplot plt.scatter (df.x, df.y)

Обратите внимание, что вы можете использовать аргументы s и c для изменения размера и цвета точек соответственно:
plt.scatter (df.x, df.y, s= 60 , c='purple')

Вы можете найти больше руководств по Python здесь .
Рисуем ступенчатые, стековые, 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’):
Укажем второе значение ‘post’, получим изображение:
ax.step(x, x, '-go', where='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:
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)
В качестве маркеров можно использовать следующие символы:
Matplotlib. Урок 4.2. Визуализация данных. Ступенчатый, стековый, точечный график и другие
![]()
В этому уроке рассмотрим на примерах работу со ступенчатым, стековым, stem-графиком и точечным графиком.
- Ступенчатый график
- Стековый график
- 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() :
- 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
- Формат базовой линии
- 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 или 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 комментарий
- Узбек 18.09.2020 Ссайт реально хороший.Ребята все чётко объяснили.Вопросов нет