Знайте разницу - и сделайте так, чтобы они выглядели потрясающе!
Прошло несколько дней с момента моей последней публикации в библиотеке Plotly, причем последняя статья посвящена гистограммам и линейным диаграммам. Хотя я рекомендую прочитать его перед этим, это ни в коем случае не обязательно, поскольку каждая статья написана так, чтобы рассказывать всю историю.
Если вы хотите продолжить серию, вот ссылки:
- 4 причины, по которым я выбираю графику в качестве основной библиотеки визуализаций
- График спереди назад: гистограммы и линейные диаграммы
Хорошо, давайте без лишних слов поговорим о том, о чем идет речь в этой статье. Основная идея состоит в том, чтобы взять набор данных (хорошо известный, но об этом чуть позже) и изучить, как его можно визуализировать - с помощью точечных и пузырьковых диаграмм.
Используемый набор данных довольно мал, но его будет достаточно для наших нужд, и его можно скачать с этого URL. Вам не нужно загружать его, поскольку мы импортируем его прямо из Интернета.
Хорошо, без лишних слов, приступим!
Импорт и набор данных
Что касается импорта, нам понадобятся две библиотеки - Pandas
и Plotly
. Вот как их импортировать:
import pandas as pd import plotly.graph_objs as go import plotly.offline as pyo
Что касается набора данных, мы возьмем его прямо с GitHub. Это хорошо известный набор данных об автомобилях, идеально подходящий для того типа визуализации, который мы будем делать:
df = pd.read_csv(‘https://raw.githubusercontent.com/plotly/datasets/master/mtcars.csv') df.head()
Хорошо, вот и все, давайте теперь перейдем к хорошему.
Диаграммы разброса
Основная идея диаграммы рассеяния состоит в том, чтобы визуализировать взаимосвязь между набором переменных. Под отношениями мы понимаем зависимость между переменными - или движение - что происходит со второй переменной, если первая переместится на некоторую величину - или корреляцию, чтобы выразиться проще.
Диаграммы разброса чрезвычайно просто создать с помощью Plotly - ну, почти все (кроме карт, они могут быть проблемой внизу, но подробнее об этом в паре статей), поскольку нам нужно определить хорошо известные параметры data
и layout
.
Как и в случае с линейными графиками, мы будем использовать go.Scatter()
для наших данных, но нам нужно будет указать mode='markers'
, чтобы все работало правильно.
Вот как вы визуализируете атрибуты hp
(лошадиные силы) по оси x и mpg
(миль на галлон) по оси Y:
fig = go.Figure( data=[ go.Scatter( x=df[‘hp’], y=df[‘mpg’], mode=’markers’, ) ], layout=go.Layout( title=dict( text=’Horsepower vs. MPG’, font=dict(size=20) ), hovermode=’closest’ ) ) pyo.plot(fig)
Не слишком много строк кода, но давайте посмотрим, к чему это приведет:
Я знаю, о чем вы сейчас думаете:
- Базовые точки слишком скучны
- Цвет ужасный
- Маркеры слишком маленькие
Что ж, давайте исправим эти проблемы:
fig = go.Figure( data=[ go.Scatter( x=df[‘hp’], y=df[‘mpg’], mode=’markers’, marker=dict( size=16, symbol=’x-dot’, color=’#d35400' ) ) ], layout=go.Layout( title=dict( text=’Horsepower vs. MPG’, font=dict(size=20) ), hovermode=’closest’ ) ) pyo.plot(fig)
Каждую проблему, с которой мы сталкивались ранее, можно исправить, настроив параметры маркера с помощью аргумента marker
. Вот как теперь выглядит наша диаграмма:
Все-таки не самое красивое, но пока сгодится. Давайте теперь исследуем старшего брата диаграмм рассеивания - пузырьковых диаграмм - чтобы увидеть, насколько просто отображать дополнительную информацию и устанавливать динамический размер.
Пузырьковые диаграммы
На всякий случай, если вы не прочитали всю статью, а вместо этого пропустили этот раздел, вам следует знать следующее: мы обычно используем пузырьковые диаграммы для отображения дополнительной информации либо через размер или color - или и то, и другое.
Например, предположим, что мы все еще хотим поместить hp
(лошадиные силы) по оси x и mpg
(миль на галлон) по оси Y, но мы также хотели бы установить размер как динамический - скажем, в соответствии с атрибуту wt
(вес), а также установить динамический цвет - по количеству цилиндров cyl
.
Звучит слишком много информации для одной диаграммы, но на самом деле это не так. Вот как реализовать вышесказанное в коде:
fig = go.Figure( data=[ go.Scatter( x=df[‘hp’], y=df[‘mpg’], mode=’markers’, marker=dict( size=df[‘wt’] * 10, color=df[‘cyl’] ) ) ] ) pyo.plot(fig)
Если вам интересно, мы умножили значение атрибута wt
, потому что в противном случае оно было бы слишком маленьким. Не стесняйтесь настраивать это значение по своему усмотрению. Вот как выглядит диаграмма:
Отлично. У нас есть та же информация по обеим осям, что и с простой точечной диаграммой, но здесь отображаются два дополнительных элемента информации.
Если вы спросите меня, этого оттенка желтого слишком много, поэтому давайте посмотрим, как изменить цветовую палитру:
fig = go.Figure( data=[ go.Scatter( x=df[‘hp’], y=df[‘mpg’], mode=’markers’, marker=dict( size=df[‘wt’] * 10, color=df[‘cyl’], colorscale=’Viridis’ ) ) ] ) pyo.plot(fig)
Вот как выглядит диаграмма:
Как видите, эта визуализация немного проще для глаз. Вы можете обратиться к этой странице, чтобы получить полный список доступных палитр.
Думаю, на сегодня хватит.
Прежде чем ты уйдешь
Надеюсь, для вас это было не слишком много - я знаю, что к синтаксису Plotly может потребоваться некоторое время, чтобы привыкнуть, - но это того стоит, если вы спросите меня.
В следующей статье будут рассмотрены круговые диаграммы и карты деревьев, так что следите за новостями, если вам это интересно.
Спасибо за прочтение.