- Построение графиков с использованием plotly.express
- Возможности для интерактивной работы с графиками
- Настройка отображения графиков с использованием plotly.graph_object
- Добавление интерактивности в графики
- Сохранение графиков в различных форматах
- Выводы
Plotly - это библиотека визуализации данных, которая позволяет создавать разнообразные графики, диаграммы и карты. Ее особенность заключается в том, что графики, созданные с использованием Plotly, могут быть интерактивными, что делает их более динамичными и привлекательными для пользователей.
Отличительные особенности Plotly от других библиотек визуализации:
- Интерактивность. Plotly позволяет создавать графики с широким спектром интерактивных функций, таких как масштабирование, перемещение, выделение и анимации. Это особенно полезно для представления данных в динамике и взаимодействия с ними.
- Поддержка веб-приложений. Plotly легко интегрируется в веб-приложения и дашборды. Графики могут быть встроены непосредственно в HTML-страницы, что делает их удобными для веб-разработчиков.
- Широкие возможности настройки. Plotly обеспечивает обширные возможности настройки внешнего вида графиков, начиная от цветов и линий, заканчивая макетом и осевыми метками.
- Совместимость с другими библиотеками: Plotly легко интегрируется с другими популярными библиотеками Python, такими как Pandas, NumPy, и др.
В этом уроке мы изучим основы создания графиков с использованием Plotly Express и Plotly Graph Objects. Мы научимся настраивать внешний вид графиков, добавлять интерактивные элементы управления, и сохранять результаты в различных форматах.
Построение графиков с использованием plotly.express
Начнем с построения графиков без сложной настройки. Для этого будем использовать модуль plotly.express
. Также в дальнейшем будем использовать библиотеку pandas
для создания данных, которые требуется визуализировать.
# Импортируем необходимые библиотеки
import plotly.express as px
import pandas as pd
Теперь инициализируем небольшую таблицу с 4 столбцами и 4 строками данных и нарисуем линейный график на основе этих данных.
# Создаем пример данных
data = {
"Год": [2018, 2019, 2020, 2021],
"Продажи": [500, 700, 600, 800],
"Выручка": [20000, 25000, 22000, 28000],
"Прибыль": [8000, 10000, 9000, 12000],
}
df = pd.DataFrame(data)
# Строим график с использованием Plotly Express
fig = px.line(
df,
x="Год",
y=["Продажи", "Выручка", "Прибыль"],
title="Динамика бизнес-показателей",
labels={"value": "Значение", "variable": "Показатель", "Год": "Год"},
line_shape="linear",
render_mode="svg",
)
# Настраиваем внешний вид графика
fig.update_layout(
title=dict(text="Динамика бизнес-показателей", x=0.5),
xaxis_title="Год",
yaxis_title="Значение",
legend=dict(x=0, y=1, traceorder="normal", orientation="h"),
autosize=False,
width=800,
height=500,
)
# Отображаем график
fig.show()
Вы можете запустить код в интерактивной ячейке Google Colab ниже
Интерактивная ячейка
Код выше создает линейный график отображает годовые изменения 'Продаж', 'Выручки' и 'Прибыли'. Далее построим пример использования еще одного популярного графика - "ящика с усами".
# Создаем пример данных
data = {
"Категория": ["A", "B", "A", "B", "A", "B", "A", "B"],
"Значение": [10, 15, 13, 18, 9, 20, 11, 16],
}
df = pd.DataFrame(data)
# Строим box plot с использованием Plotly Express
fig = px.box(
df,
x="Категория",
y="Значение",
title="Box plot: Сравнение двух категорий",
labels={"Значение": "Значение", "Категория": "Категория"},
points="all", # Отображение всех точек (возможно также 'outliers', False)
color="Категория", # Различные цвета для каждой категории
boxmode="group", # Группировка box plot
)
# Настраиваем внешний вид графика
fig.update_layout(
title=dict(text="Box plot: Сравнение двух категорий", x=0.5),
xaxis_title="Категория",
yaxis_title="Значение",
legend=dict(x=0, y=1, traceorder="normal", orientation="h"),
autosize=False,
width=800,
height=500,
)
# Отображаем график
fig.show()
Интерактивная ячейка
Этот код создает box plot для сравнения значений между двумя категориями. Вы можете настроить цвета, отображение выбросов (outliers), добавить подписи и другие параметры на ваше усмотрение. Все графики, построенные с помощью plotly
являются интерактивными. Давайте познакомимся с доступными функциональными кнопками, расположенными в правом верхнем углу и появляющимися при наведении курсора мыши на график.
Возможности для интерактивной работы с графиками
Plotly Express предоставляет множество встроенных возможностей для интерактивной работы с графиками. В зависимости от версии plotly
набор кнопок может изменяться, но в целом всегда выглядит следующим образом:
Ниже приведен обзор некоторых стандартных кнопок и функций, которые могут быть доступны на интерактивных графиках, созданных с использованием Plotly Express:
- Zoom In/Out (Увеличение/Уменьшение). Вы можете увеличивать или уменьшать область графика, чтобы более детально рассмотреть данные. Для этого используются кнопки управления масштабом.
- Pan (Перемещение). Кнопка "Pan" позволяет перемещаться по графику для просмотра различных областей. Это особенно полезно на крупных графиках.
- Reset (Сброс). Кнопка "Reset" возвращает график к исходному масштабу и положению.
- Hover (Наведение). При наведении курсора на элемент графика, могут появляться всплывающие подсказки с дополнительной информацией.
- Выбор данных (Selection). Возможность выделения определенных данных на графике. Например, на точечных графиках scatter plot можно выделять точки мышью.
- Сохранение (Save). Обычно, есть опция сохранения графика в различных форматах (например, PNG, SVG) для дальнейшего использования в презентациях или документах.
- Легенда (Legend). Легенда на графике может быть интерактивной, позволяя скрывать или отображать определенные элементы данных при клике на соответствующую метку в легенде.
- 3D Rotate (Вращение в 3D). Для 3D графиков может быть предусмотрена возможность вращения графика для просмотра с разных углов.
Важно отметить, что доступные кнопки и функции могут варьироваться в зависимости от типа графика и конкретных параметров, установленных в вашем коде. При создании графика с Plotly Express, вы можете настраивать интерактивные возможности, добавляя соответствующие аргументы к функции update_layout
и другим методам настройки. Далее мы посмотрим на примерах модуль
plotly.graph_object`, который расширяет перечень доступных настроек графиков.
Настройка отображения графиков с использованием plotly.graph_object
Модуль plotly.graph_objects
предоставляет более гибкий и детализированный способ создания и настройки графиков в Plotly. Основным объектом в этом модуле является go.Figure
, который представляет собой контейнер для всех элементов вашего графика.
Вот пример настройки различных аспектов графика с использованием plotly.graph_objects
:
import plotly.graph_objects as go
# Создаем пример данных
x_data = [1, 2, 3, 4, 5]
y_data = [10, 11, 12, 13, 14]
# Создаем объект Figure
fig = go.Figure()
# Добавляем график (scatter plot) к объекту Figure
fig.add_trace(
go.Scatter(x=x_data, y=y_data, mode="lines+markers", name="Пример данных")
)
# Настраиваем внешний вид графика
fig.update_layout(
title="Название графика",
xaxis_title="Название оси X",
yaxis_title="Название оси Y",
width=800,
height=500,
)
# Настраиваем макет легенды
fig.update_layout(legend=dict(x=0, y=1, traceorder="normal", orientation="h"))
# Настраиваем макет осей
fig.update_xaxes(title_text="Ось X", tickmode="linear", tick0=0.5, dtick=0.5)
fig.update_yaxes(title_text="Ось Y", tickmode="linear", tick0=2, dtick=1)
# Настраиваем общий макет
fig.update_layout(
margin=dict(l=50, r=50, t=50, b=50), # Отступы от краев холста
paper_bgcolor="lightgray", # Цвет фона холста
)
# Отображаем график
fig.show()
Интерактивная ячейка
В приведенном примере:
update_layout
используется для настройки общих параметров графика, таких как название, размеры, цвет фона и дрupdate_xaxes
и update_yaxes используются для настройки осей, включая название, разметку и другие параметрыlegend
вupdate_layout
используется для настройки расположения легенды
Каждый из этих методов предоставляет множество параметров для более тонкой настройки. Подробную информацию о доступных параметрах можно найти в документации Plotly.
Объект Figure
в библиотеке Plotly является основной структурой данных, предназначенной для представления графиков и диаграмм. Figure
служит контейнером для всех элементов графика, таких как данные, трассы (traces
), макет (layout
), аннотации и многое другое. Когда вы создаете график с использованием Plotly, вы обычно создаете объект Figure и добавляете к нему различные элементы для отображения информации.
Основные компоненты объекта Figure включают:
Data
(Данные). Информация, которую вы хотите отобразить на графике. Например, точки на scatter plot или бары на bar chart. В Plotly, данные обычно представлены в виде объектовtraces
.Layout
(Макет). Параметры, определяющие внешний вид и расположение графика. Включает в себя названия графика и осей, размеры, цвет фона, расположение легенды и многое другое.Frames
(Кадры). В случае анимированных графиков,Figure
может содержать информацию о кадрах, которая представляет собой последовательность "снимков" графика для воспроизведения анимации.
Объект Figure
предоставляет множество методов для настройки внешнего вида и поведения графика. Вы можете добавлять дополнительные трассы, аннотации, устанавливать параметры макета и осей, создавать анимации и многое другое.
Добавление интерактивности в графики
Для добавления интерактивных кнопок выбора (radio buttons) и выпадающего меню (dropdown) в график с использованием Plotly Express
или Plotly Graph Objects
, вы можете воспользоваться методами, предоставляемыми библиотекой. Вот примеры использования обоих методов:
import plotly.express as px
# Создаем пример данных
data = {"x": [1, 2, 3, 4], "y": [10, 11, 12, 13], "category": ["A", "A", "B", "B"]}
# Создаем объект Figure с использованием Plotly Express
fig = px.scatter(
data,
x="x",
y="y",
color="category",
title="График с кнопкой выбора и выпадающим меню",
)
# Добавляем кнопку выбора (radio buttons)
fig.update_layout(
updatemenus=[
dict(
type="buttons",
showactive=True,
buttons=[
dict(
label="Категория A",
method="update",
args=[
{"visible": [True, False]},
{
"title": "График с кнопкой выбора и выпадающим меню - Категория A"
},
],
),
dict(
label="Категория B",
method="update",
args=[
{"visible": [False, True]},
{
"title": "График с кнопкой выбора и выпадающим меню - Категория B"
},
],
),
],
),
]
)
# Добавляем выпадающее меню
fig.update_layout(
updatemenus=[
dict(
type="dropdown",
x=1.05,
y=0.7,
showactive=True,
buttons=[
dict(
label="Категория A",
method="update",
args=[
{"visible": [True, False]},
{
"title": "График с кнопкой выбора и выпадающим меню - Категория A"
},
],
),
dict(
label="Категория B",
method="update",
args=[
{"visible": [False, True]},
{
"title": "График с кнопкой выбора и выпадающим меню - Категория B"
},
],
),
],
),
]
)
# Отображаем график
fig.show()
Интерактивная ячейка
Оба примера добавляют кнопку выбора и выпадающее меню для переключения между разными категориями данных на графике. Вы можете настроить параметры кнопок и выпадающего меню, а также изменить их внешний вид согласно вашим требованиям. Для переноса графиков в презентации и отчеты требуется сохранить их в подходящий формат. Давайте посмотрим на реалиацию этого функционала в Plotly.
Сохранение графиков в различных форматах
Сохранение графиков в различных форматах в Plotly можно осуществить с использованием метода write_image()
объекта Figure
. Вот пример, демонстрирующий сохранение графика в форматы PNG, SVG и PDF:
import plotly.graph_objects as go
# Создаем пример данных
x_data = [1, 2, 3, 4, 5]
y_data = [10, 11, 12, 13, 14]
# Создаем объект Figure
fig = go.Figure()
# Добавляем график (scatter plot) к объекту Figure
fig.add_trace(
go.Scatter(x=x_data, y=y_data, mode="lines+markers", name="Пример данных")
)
# Настраиваем внешний вид графика
fig.update_layout(
title="Пример графика",
xaxis_title="Ось X",
yaxis_title="Ось Y",
)
# Сохраняем график в формат PNG
fig.write_image("plotly_chart.png")
# Сохраняем график в формат SVG
fig.write_image("plotly_chart.svg")
# Сохраняем график в формат PDF
fig.write_image("plotly_chart.pdf")
Для запуска ячейки после установки библиотеки kaleido нужно перезапустить среду запуска (Runtime -> Restart session)
Интерактивная ячейка
В данном примере:
- cоздается объект
Figure
с графиком типаscatter plot
. - настраивается внешний вид графика.
- график сохраняется в форматах PNG, SVG и PDF с использованием метода
write_image()
.
Помните, что для использования метода write_image() вам может потребоваться установить дополнительные библиотеки, такие как kaleido
для работы с форматами, не поддерживаемыми напрямую Plotly (например, PDF). Вы можете установить kaleido
с помощью:
pip install -U kaleido
Для интеграции в веб-приложения также доступно сохранения графика в формате HTML в Plotly, вы можете воспользоваться методом write_html()
. Рассмотрим пример:
# Сохраняем график в формате HTML
fig.write_html("plotly_chart.html")
В этом примере, после создания и настройки объекта Figure
, используется метод write_html()
, чтобы сохранить график в формате HTML. После выполнения этого кода, в текущей рабочей директории появится файл plotly_chart.html
с интерактивным графиком.
Обратите внимание, что для сохранения в HTML формате не требуется дополнительных библиотек, и это является стандартной функциональностью Plotly.
Выводы
В данном уроке мы рассмотрели различные аспекты создания и настройки графиков с использованием библиотеки Plotly языка программирования Python.
Одним из ключевых преимуществ Plotly является его способность создавать высококачественные интерактивные графики, которые можно легко интегрировать в веб-приложения и документы. Plotly предоставляет большой выбор типов графиков и поддерживает множество пользовательских настроек, останавливается на стыке удобства использования и широких возможностей настройки, что делает его популярным выбором для создания высококачественных визуализаций данных в Python.
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.