Зарегистрируйтесь, чтобы продолжить обучение

Интерактивные графики с Plotly Python: Визуализация данных

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()

Plot 1

Вы можете запустить код в интерактивной ячейке 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()

Plot 2

Интерактивная ячейка

Этот код создает box plot для сравнения значений между двумя категориями. Вы можете настроить цвета, отображение выбросов (outliers), добавить подписи и другие параметры на ваше усмотрение. Все графики, построенные с помощью plotly являются интерактивными. Давайте познакомимся с доступными функциональными кнопками, расположенными в правом верхнем углу и появляющимися при наведении курсора мыши на график.

Возможности для интерактивной работы с графиками

Plotly Express предоставляет множество встроенных возможностей для интерактивной работы с графиками. В зависимости от версии plotly набор кнопок может изменяться, но в целом всегда выглядит следующим образом:

align=center

Ниже приведен обзор некоторых стандартных кнопок и функций, которые могут быть доступны на интерактивных графиках, созданных с использованием 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()

Plot 3

Интерактивная ячейка

В приведенном примере:

  • 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()

Plot 4

Интерактивная ячейка

Оба примера добавляют кнопку выбора и выпадающее меню для переключения между разными категориями данных на графике. Вы можете настроить параметры кнопок и выпадающего меню, а также изменить их внешний вид согласно вашим требованиям. Для переноса графиков в презентации и отчеты требуется сохранить их в подходящий формат. Давайте посмотрим на реалиацию этого функционала в 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")

plotly_chart

Для запуска ячейки после установки библиотеки 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.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff