Функция scatter — диаграммы рассеяния в Matplotlib
Создано: 23.11.2025
В отличие от графиков функций, которые строятся вызовом функции plot() модуля pyplot библиотеки Matplotlib, вызов функции scatter() из этого же модуля строит точечный график, который называют диаграммой рассеяния. Такая визуализация данных используется для наглядного установления взаимосвязи (есть она или нет) между двумя и более параметрами. Каждая точка на графике представляет собой отдельно взятое наблюдение, последовательность которых не важна.
Допустим, собраны данные какая влажность была при какой температуре. Каждая точка на диаграмме будет представлять собой соответствие между влажностью и температурой одного наблюдения.
import numpy as np import matplotlib.pyplot as plt temp = np.array([8, 6, 6, 3, -2, 0, -1, 3, 0, 5]) wet = np.array([50, 55, 50, 40, 30, 32, 30, 35, 35, 40]) plt.scatter(wet, temp) plt.show()
Глядя на такое распределение, мы можем прийти к выводу, что чем выше температура, тем выше влажность. Однако, предположим, были добавлены наблюдения другого месяца.
temp_november = np.array([8, 6, 6, 3, -2, 0, -1, 3, 0, 5]) wet_november = np.array([50, 55, 50, 40, 30, 32, 30, 35, 35, 40]) temp_october = np.array([10, 8, 5, 7, 9, 11, 10, 7, 6]) wet_october = np.array([30, 30, 28, 35, 32, 35, 38, 40, 42]) plt.scatter(wet_november, temp_november) plt.scatter(wet_october, temp_october)
И теперь вывод не так однозначен. Цвета, используемые по умолчанию для точек каждой пары, можно переопределить с помощью параметра color, или c.
В Matplotlib в диаграммах рассеяния можно задавать как индивидуальные размеры для каждой точки, так и свой цвет и прозрачность. Таким образом, каждая точка может представлять не только соответствие двух характеристик, но трех, четырех или даже пяти.
Пусть в нашем примере размер точки определяет силу ветра, цвет — давление воздуха, прозрачность точки зависит от пасмурности (1 соответствует ясной погоде, 0.5 — пасмурной, 0 — сильным осадкам).
temp = np.array([8, 6, 6, 3, -2, 0, -1, 3, 0, 5]) wet = np.array([50, 55, 50, 40, 30, 32, 30, 35, 35, 40]) wind = np.array([7, 3, 8, 10, 8, 3, 12, 5, 6, 4]) pressure = np.array([760, 740, 740, 740, 730, 730, 740, 750, 750, 755]) sunny = ([1, 0.5, 0.7, 0.5, 1, 0.7, 0.9, 0.7, 0.5, 0.8]) plt.scatter(wet, temp, s=wind*50, c=pressure, cmap='viridis_r', alpha=sunny) plt.colorbar()
В данном случае цвета задаются с помощью цветовой карты. Перечень всех карт в Matplotlib можно посмотреть так:
from matplotlib import colormaps for i in colormaps: print(i)
Окончание "_r" в названии карты обозначает реверс. Так в нашем примере если бы мы использовали 'viridis', то 760 соответствовало бы желтому цвету.
Цвета можно задавать не с помощью карты, а присваивая параметру c массив с перечнем определенных цветов. Такое бывает необходимо, когда значение имеет сам цвет, то есть он не используется для обозначения величины какой-то иной характеристики. Например, мы отображаем информацию о том, шторы какого размера (x, y — их ширина и высота) и цвета заказывались в ателье. Или показывается цвет волны в зависимости от ее длины и частоты.
В свою очередь размер и альфа могут задаваться каждый одним число. Так прозрачность точек бывает необходима, если есть вероятность, что они будут накладываться друг на друга.