Визуализация данных играет решающую роль в понимании и эффективной передаче сложной информации. Python предлагает несколько библиотек для создания интерактивных и визуально привлекательных графиков и диаграмм. Одной из таких мощных библиотек является Plotly.
Plotly — это библиотека визуализации данных с открытым исходным кодом, предоставляющая широкий спектр возможностей интерактивного построения графиков на языке Python. Plotly позволяет создавать интерактивные визуализации, включая линейные графики, точечные диаграммы, гистограммы, тепловые карты, трехмерные графики и многое другое. Благодаря своей гибкости и простоте использования библиотека широко используется в различных областях: анализ данных, научные исследования, финансы, веб-разработка и других.
Этот универсальный инструмент завоевал популярность среди специалистов по данным, аналитиков и разработчиков. Ежемесячно библиотеку скачивают более 16 500 000 раз.

Ключевые особенности Plotly
Plotly предоставляет много возможностей для создания интерактивных и красочных графиков:
- Интерактивность: Plotly позволяет создавать интерактивные графики и диаграммы, которые реагируют на действия пользователя, такие как наведение курсора, щелчок и масштабирование. Такая интерактивность расширяет возможности исследования и понимания данных.
- Разнообразие графиков: библиотека содержит множество типов графиков, включая линейные графики, гистограммы, точечные диаграммы, контурные карты, трехмерные графики и т.д.
- Богатая настройка графиков: Plotly предоставляет полный набор опций для настройки графиков. Пользователи могут управлять различными аспектами — цветовые палитры, шрифты, оси, аннотации, легенды, заголовки и макет — для создания визуально привлекательных и информативных визуализаций.
- Поддержка нескольких платформ: Plotly поддерживает различные платформы и языки программирования, включая Python, JavaScript, R и MATLAB. Такая гибкость обеспечивает плавную интеграцию с существующими рабочими процессами и облегчает сотрудничество между командами, использующими различные инструменты.
- Экспорт и встраивание: графики, созданные с помощью Plotly, можно экспортировать в различные форматы (например, PNG, SVG) и встраивать в веб-страницы, блокноты Jupyter и другие приложения.
- Совместная работа и обмен данными в интернете: Plotly предлагает онлайн-платформу Plotly Chart Studio, где пользователи могут создавать, редактировать и делиться графиками. Он обеспечивает централизованное место для хранения визуализаций и совместной работы над ними, что упрощает обмен информацией с другими.
Я использовал Plotly для создания интерактивных графиков и диаграмм в различных проектах, например, при создании дашбордов для мониторинга ключевых показателей.
Среди плюсов использования Plotly могу назвать:
- Интерактивность. Plotly позволяет создавать графики с возможностью интерактивного взаимодействия, такого как увеличение, выбор данных по клику и прокрутка.
- Широкие возможности. Plotly предлагает множество типов графиков и диаграмм для визуализации различных типов данных.
- Хорошую документацию. У Plotly хорошо структурированная и подробная документация, что упрощает процесс изучения и использования библиотеки.
- Поддержку различных платформ. Plotly может использоваться как в Jupyter Notebook, так и в веб-приложениях, что делает его удобным для разных сценариев использования.
Минусы, конечно, тоже есть:
- Иногда требуется дополнительное время на настройку. Настройка определенных аспектов графиков в Plotly может потребовать дополнительных усилий и времени для достижения желаемого результата.
- Стоимость. Некоторые функции Plotly недоступны без платной версии.
В целом, Plotly — мощный инструмент для визуализации данных, который приносит значительную ценность при работе с информацией и обеспечивает возможность создания красивых и понятных графиков и диаграмм.
Начало работы с библиотекой
Чтобы использовать Plotly в Python, необходимо установить эту библиотеку с помощью инструмента управления пакетами Python — pip. В командной строке или терминале надо ввести pip install plotly.
После установки можно импортировать библиотеку в скрипт Python и начать создавать интерактивные графики. Plotly предоставляет интуитивно понятный API, который упрощает процесс создания визуализаций.
Также с особенностями работы в библиотеке поможет разобраться форум с советами опытных разработчиков, которые работают с Plotly.
Виды графиков в Plotly
Plotly поддерживает различные типы графиков, с которыми можно ознакомиться в документации библиотеки. Библиотека содержит более 30 типов диаграмм, включая научные диаграммы, трехмерные графики, статистические диаграммы, карты, финансовые диаграммы, анимации и многое другое. Рассмотрим некоторые из них.
Линейный график
Этот тип графика используется для визуализации отношения между переменными путем отображения точек на плоскости и соединения их линиями. Он часто используется для отображения трендов и показа изменения данных во времени.
Пример линейного графика динамики продолжительности жизни в странах по континентам.
from dash import Dash, dcc, html, Input, Output
import plotly.express as px
app = Dash(__name__)
app.layout = html.Div([
html.H4('Life expentancy progression of countries per continents'),
dcc.Graph(id="graph"),
dcc.Checklist(
id="checklist",
options=["Asia", "Europe", "Africa","Americas","Oceania"],
value=["Americas", "Oceania"],
inline=True
),
])
@app.callback(
Output("graph", "figure"),
Input("checklist", "value"))
def update_line_chart(continents):
df = px.data.gapminder() # replace with your own data source
mask = df.continent.isin(continents)
fig = px.line(df[mask],
x="year", y="lifeExp", color='country')
return fig
app.run_server(debug=True)

Гистограмма
Гистограмма используется для отображения распределения частоты или плотности данных. Она разбивает данные на интервалы и показывает, сколько значений попадает в каждый интервал.
Пример гистограммы с данными о населении Канады.
import plotly.express as px
df = px.data.gapminder().query("country == 'Canada'")
fig = px.bar(df, x='year', y='pop',
hover_data=['lifeExp', 'gdpPercap'], color='lifeExp',
labels={'pop':'population of Canada'}, height=400)
fig.show()

Пузырьковая диаграмма
Этот тип графика похож на линейный график, но вместо линий используются точки различных размеров. Каждая точка имеет координаты, соответствующие значениям переменных.
Пример пузырьковой диаграммы с данными об ожидаемой продолжительности жизни на континентах и ВВП на душу населения в 2007 году.
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import math
# Load data, define hover text and bubble size
data = px.data.gapminder()
df_2007 = data[data['year']==2007]
df_2007 = df_2007.sort_values(['continent', 'country'])
hover_text = []
bubble_size = []
for index, row in df_2007.iterrows():
hover_text.append(('Country: {country}<br>'+
'Life Expectancy: {lifeExp}<br>'+
'GDP per capita: {gdp}<br>'+
'Population: {pop}<br>'+
'Year: {year}').format(country=row['country'],
lifeExp=row['lifeExp'],
gdp=row['gdpPercap'],
pop=row['pop'],
year=row['year']))
bubble_size.append(math.sqrt(row['pop']))
df_2007['text'] = hover_text
df_2007['size'] = bubble_size
sizeref = 2.*max(df_2007['size'])/(100**2)
# Dictionary with dataframes for each continent
continent_names = ['Africa', 'Americas', 'Asia', 'Europe', 'Oceania']
continent_data = {continent:df_2007.query("continent == '%s'" %continent)
for continent in continent_names}
# Create figure
fig = go.Figure()
for continent_name, continent in continent_data.items():
fig.add_trace(go.Scatter(
x=continent['gdpPercap'], y=continent['lifeExp'],
name=continent_name, text=continent['text'],
marker_size=continent['size'],
))
# Tune marker appearance and layout
fig.update_traces(mode='markers', marker=dict(sizemode='area',
sizeref=sizeref, line_width=2))
fig.update_layout(
title='Life Expectancy v. Per Capita GDP, 2007',
xaxis=dict(
title='GDP per capita (2000 dollars)',
gridcolor='white',
type='log',
gridwidth=2,
),
yaxis=dict(
title='Life Expectancy (years)',
gridcolor='white',
gridwidth=2,
),
paper_bgcolor='rgb(243, 243, 243)',
plot_bgcolor='rgb(243, 243, 243)',
)
fig.show()

Круговая диаграмма
Этот тип графика используется для отображения процентного соотношения частей к целому. Каждая секция круговой диаграммы представляет собой часть от общего значения.
Пример круговой диаграммы с данными о выбросах парниковых и углекислого газов в мире с 1990 по 2011 год.
import plotly.graph_objects as go
from plotly.subplots import make_subplots
labels = ["US", "China", "European Union", "Russian Federation", "Brazil", "India",
"Rest of World"]
# Create subplots: use 'domain' type for Pie subplot
fig = make_subplots(rows=1, cols=2, specs=[[{'type':'domain'}, {'type':'domain'}]])
fig.add_trace(go.Pie(labels=labels, values=[16, 15, 12, 6, 5, 4, 42], name="GHG Emissions"),
1, 1)
fig.add_trace(go.Pie(labels=labels, values=[27, 11, 25, 8, 1, 3, 25], name="CO2 Emissions"),
1, 2)
# Use `hole` to create a donut-like pie chart
fig.update_traces(hole=.4, hoverinfo="label+percent+name")
fig.update_layout(
title_text="Global Emissions 1990-2011",
# Add annotations in the center of the donut pies.
annotations=[dict(text='GHG', x=0.18, y=0.5, font_size=20, showarrow=False),
dict(text='CO2', x=0.82, y=0.5, font_size=20, showarrow=False)])
fig.show()

Поверхностная диаграмма
Этот тип графика используется для визуализации трехмерных данных. Он показывает поверхность, которая состоит из значений в трех измерениях.
Поверхностная диаграмма на примере горы Бруно.
import plotly.graph_objects as go
import pandas as pd
import numpy as np
# Read data from a csv
z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
z = z_data.values
sh_0, sh_1 = z.shape
x, y = np.linspace(0, 1, sh_0), np.linspace(0, 1, sh_1)
fig = go.Figure(data=[go.Surface(z=z, x=x, y=y)])
fig.update_layout(title='Mt Bruno Elevation', autosize=False,
width=500, height=500,
margin=dict(l=65, r=50, b=65, t=90))
fig.show()

Карты
В Plotly можно создавать интерактивные графики с картами, что делает его полезным инструментом для визуализации географических данных. В библиотеке доступны различные типы карт, включая фоновые картограммы, карты с размещением маркеров, тепловые карты и другие.
Пример фоновой картограммы с данными об уровне безработицы в США.
from urllib.request import urlopen
import json
with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
counties = json.load(response)
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
dtype={"fips": str})
import plotly.express as px
fig = px.choropleth_mapbox(df, geojson=counties, locations='fips', color='unemp',
color_continuous_scale="Viridis",
range_color=(0, 12),
mapbox_style="carto-positron",
zoom=3, center = {"lat": 37.0902, "lon": -95.7129},
opacity=0.5,
labels={'unemp':'unemployment rate'}
)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()

Matplotlib или Plotly
Кроме Plotly, есть еще одна популярная среди аналитиков библиотека — Matplotlib. Обе библиотеки предлагают мощные возможности для создания графиков и диаграмм, но у них есть явные различия, которые делают их подходящими для разных случаев.

Стоит отметить, что Matplotlib и Plotly не являются взаимоисключающими и могут использоваться вместе в зависимости от конкретных потребностей проекта.
Matplotlib хорошо подходит для статичных графиков в печатных материалах, а Plotly отлично поможет в создании интерактивных и веб-визуализаций.
Полезные ссылки
Красиво и понятно: какие инструменты для визуализации данных нужны дата-аналитику
