Матплотлиб Скаттер
Создание точечных диаграмм
С помощью Pyplot вы можете использовать эту scatter()
функцию для рисования точечной диаграммы.
Функция scatter()
строит одну точку для каждого наблюдения. Ему нужны два массива одинаковой длины, один для значений по оси x и один для значений по оси y:
Пример
Простой график рассеяния:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y)
plt.show()
Результат:
Наблюдение в приведенном выше примере является результатом проезжающих мимо 13 автомобилей.
Ось X показывает, сколько лет машине.
Ось Y показывает скорость автомобиля при его прохождении.
Есть ли связь между наблюдениями?
Кажется, что чем новее машина, тем быстрее она едет, но это могло быть совпадением, ведь мы зарегистрировали всего 13 машин.
Сравните участки
В приведенном выше примере кажется, что существует связь между скоростью и возрастом, но что, если мы нанесем наблюдения и на другой день? Расскажет ли нам точечная диаграмма что-то еще?
Пример
Нарисуйте два графика на одной и той же фигуре:
import matplotlib.pyplot as plt
import numpy as np
#day one, the age
and speed of 13 cars:
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y)
#day two, the age and speed of 15 cars:
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y)
plt.show()
Результат:
Примечание . Два графика отображаются двумя разными цветами, по умолчанию синим и оранжевым, вы узнаете, как изменить цвета позже в этой главе.
Сравнивая два графика, я думаю, можно с уверенностью сказать, что они оба дают нам один и тот же вывод: чем новее автомобиль, тем быстрее он едет.
Цвета
Вы можете установить свой собственный цвет для каждого графика рассеяния с
помощью
аргумента color
или :c
Пример
Установите свой собственный цвет маркеров:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y, color = 'hotpink')
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')
plt.show()
Результат:
Раскрась каждую точку
Вы даже можете установить определенный цвет для каждой точки, используя массив цветов в качестве значения для
c
аргумента:
Примечание. Для этого нельзя использовать color
аргумент, только c
аргумент.
Пример
Установите свой собственный цвет маркеров:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
Результат:
Карта цветов
Модуль Matplotlib имеет ряд доступных цветовых карт.
Цветовая карта похожа на список цветов, где каждый цвет имеет значение в диапазоне от 0 до 100.
Вот пример карты цветов:
Эта цветовая карта называется «viridis» и, как вы можете видеть, варьируется от 0 (фиолетовый цвет) до 100 (желтый цвет).
Как использовать цветовую карту
Вы можете указать цветовую карту с аргументом ключевого слова
cmap
со значением цветовой карты, в данном случае 'viridis'
это одна из встроенных цветовых карт, доступных в Matplotlib.
Кроме того, вам нужно создать массив со значениями (от 0 до 100), по одному значению для каждой точки на точечной диаграмме:
Пример
Создайте массив цветов и укажите карту цветов на диаграмме рассеяния:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.show()
Результат:
Вы можете включить палитру в рисунок, включив plt.colorbar()
оператор:
Пример
Включите фактическую карту цветов:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()
Результат:
Доступные карты цветов
Вы можете выбрать любую из встроенных палитр:
Name | Reverse | |||
---|---|---|---|---|
Accent | Accent_r | |||
Blues | Blues_r | |||
BrBG | BrBG_r | |||
BuGn | BuGn_r | |||
BuPu | BuPu_r | |||
CMRmap | CMRmap_r | |||
Dark2 | Dark2_r | |||
GnBu | GnBu_r | |||
Greens | Greens_r | |||
Greys | Greys_r | |||
OrRd | OrRd_r | |||
Oranges | Oranges_r | |||
PRGn | PRGn_r | |||
Paired | Paired_r | |||
Pastel1 | Pastel1_r | |||
Pastel2 | Pastel2_r | |||
PiYG | PiYG_r | |||
PuBu | PuBu_r | |||
PuBuGn | PuBuGn_r | |||
PuOr | PuOr_r | |||
PuRd | PuRd_r | |||
Purples | Purples_r | |||
RdBu | RdBu_r | |||
RdGy | RdGy_r | |||
RdPu | RdPu_r | |||
RdYlBu | RdYlBu_r | |||
RdYlGn | RdYlGn_r | |||
Reds | Reds_r | |||
Set1 | Set1_r | |||
Set2 | Set2_r | |||
Set3 | Set3_r | |||
Spectral | Spectral_r | |||
Wistia | Wistia_r | |||
YlGn | YlGn_r | |||
YlGnBu | YlGnBu_r | |||
YlOrBr | YlOrBr_r | |||
YlOrRd | YlOrRd_r | |||
afmhot | afmhot_r | |||
autumn | autumn_r | |||
binary | binary_r | |||
bone | bone_r | |||
brg | brg_r | |||
bwr | bwr_r | |||
cividis | cividis_r | |||
cool | cool_r | |||
coolwarm | coolwarm_r | |||
copper | copper_r | |||
cubehelix | cubehelix_r | |||
flag | flag_r | |||
gist_earth | gist_earth_r | |||
gist_gray | gist_gray_r | |||
gist_heat | gist_heat_r | |||
gist_ncar | gist_ncar_r | |||
gist_rainbow | gist_rainbow_r | |||
gist_stern | gist_stern_r | |||
gist_yarg | gist_yarg_r | |||
gnuplot | gnuplot_r | |||
gnuplot2 | gnuplot2_r | |||
gray | gray_r | |||
hot | hot_r | |||
hsv | hsv_r | |||
inferno | inferno_r | |||
jet | jet_r | |||
magma | magma_r | |||
nipy_spectral | nipy_spectral_r | |||
ocean | ocean_r | |||
pink | pink_r | |||
plasma | plasma_r | |||
prism | prism_r | |||
rainbow | rainbow_r | |||
seismic | seismic_r | |||
spring | spring_r | |||
summer | summer_r | |||
tab10 | tab10_r | |||
tab20 | tab20_r | |||
tab20b | tab20b_r | |||
tab20c | tab20c_r | |||
terrain | terrain_r | |||
twilight | twilight_r | |||
twilight_shifted | twilight_shifted_r | |||
viridis | viridis_r | |||
winter | winter_r |
Размер
Вы можете изменить размер точек с помощью
s
аргумента.
Как и в случае с цветами, убедитесь, что массив для размеров имеет ту же длину, что и массивы для осей X и Y:
Пример
Установите свой собственный размер для маркеров:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes)
plt.show()
Результат:
Альфа
Вы можете настроить прозрачность точек с помощью
alpha
аргумента.
Как и в случае с цветами, убедитесь, что массив для размеров имеет ту же длину, что и массивы для осей X и Y:
Пример
Установите свой собственный размер для маркеров:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes, alpha=0.5)
plt.show()
Результат:
Объединить размер цвета и альфа-канал
Вы можете комбинировать палитру с разными размерами точек. Это лучше всего визуализируется, если точки прозрачны:
Пример
Создайте случайные массивы со 100 значениями для точек x, y, цветов и размеров:
import matplotlib.pyplot as plt
import numpy as np
x =
np.random.randint(100, size=(100))
y = np.random.randint(100, size=(100))
colors = np.random.randint(100, size=(100))
sizes = 10 * np.random.randint(100,
size=(100))
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='nipy_spectral')
plt.colorbar()
plt.show()
Результат: