Все, что нужно знать для построения фигур в Plotly

Plotly — один из самых богатых Python-инструментов визуализации данных для Data Science. В этой статье мы расскажем вам об основных концепциях  библиотеки Plotly: структура фигур, корневые атрибуты (data, layout, frames), позиционирование, отрисовка в декартовых системах координат, а также связь между Dash и Plotly.

Фигура — это данные в JSON

За отрисовку фигур (диаграмм, карт, рисунков и т.д.) ответственна библиотека Plotly.js языка JavaScript, но знать его совсем не нужно. Фигуры представляются данными в формате JSON (JavaScript Object Notation), который по структуре мало чем отличается от словаря (dict) в Python. Доступ к ним возможен через вызов класс plotly.graph_objects.Figure.
Чтобы посмотреть структуру в формате JSON, нужно использовать print(fig), а fig.show() отрисует саму фигуру, как это показано в Python ниже.
[gist id=»2f97e65349d1d9476bd9c22ef9d03c2e»]

Линейная диаграмма Plotly
Отрисованная фигура Plotly

Фигуры в виде дерева атрибутов

Поскольку фигура представляется в JSON, то доступ к атрибутам осуществляется за счет полного прописывания пути. Например, запись layout.width обращается к ширине (width) макета (layout). Если же значением какого-либо атрибута является список (list), а не словарь, то используются квадратные скобки — layout.annotations[].text.
Для изменения значений атрибутов можно либо просто передать им новое значение, либо использовать методы обновления. Вот так в Python выглядят оба способа для изменения шрифта:

fig.layout.title.font.family="Open Sans"
fig.update_layout(title_font_family="Open Sans")

В Plotly есть три корневых атрибута: data, layout и frames.

Корневой атрибут data

Первый корневой атрибут data имеет значением список словарей. Эти словари называются traces (трейс). Они имеют следующие характеристики:

  • Каждый trace имеет один из 40 типов (type) фигур. В примере выше данным типом выступал scatter (диаграмма рассеяния);
  • Каждый trace отрисовывается на своём собственном графическом окне (sublot);
  • Трейс может иметь одну легенду, за исключением круговой диаграммы (pie) и воронкообразного графика (funnel chart);
  • Некоторые типы фигур поддерживают непрерывные цвета, которые ассоциируются с цветной полосой. Цвета таких фигур могут изменяться напрямую, либо через атрибут coloraxis в layout.

Корневой атрибут layout

Второй корневой атрибут layout имеет значением словарь. Данный атрибут ответственен за расположение и настройки не связанных с данными частей фигуры. К этим частям относятся:

  • Размеры и координаты фигуры;
  • Макетные параметры фигуры: шаблоны, шрифты, цвета, метки при наведении;
  • Заголовок и легенда;
  • Графические окна для расположения в них трейсов. Для каждого типа будет свои атрибуты:
    1. xaxis, yaxis, xaxis2, yaxis3 и т.д. для диаграмм в декартовой системе координат,
    2. scene, scene2, scene3 и т.д. для 3D-графиков,
    3. ternary, ternary2, ternary3, polar, polar2, polar3, geo, geo2, geo3, mapbox, mapbox2, mabox3 и т.д. для тернарных, полярных и географических окон;
  • Не относящиеся к данным метки, которые могут быть расположены в «макетных» координатах (о них ниже) или в двумерной декартовой системе координат:
    1. аннотации,
    2. формы (линии, прямоугольники и т.д.),
    3. рисунки;
  • Элементы управления, которые могут быть расположены в макетных координатах и которые могут запускать функции Plotly.js при взаимодействии с пользователем:
    1. меню обновлений (updatemenus): кнопки, выпадающие списки, переключатели и т.д.,
    2. слайдеры (sliders).

Корневой атрибут frames

Третьим корневым атрибутом является frames, чьи значения представляются списком словарей. Эти словари соответствуют кадрам в анимированном графике. Каждый кадр содержит свой собственный атрибут данных, а также другие параметры. Анимация обычно запускается и управляется с помощью элементов управления, определённых в layout.sliders и/или layout.updatemenus.

Позиционирование макетных координат

Различные компоненты Plotly поддерживают атрибуты x и y, которые определят положение. К таким атрибутам могут относиться, например, layout.xaxis.domain, layout.legend.x или layout.annotation[].x.
Позиционирование в макетных координатах не соответствует экранному в пикселах. Макетные координаты — это доли, которые приходятся на компоненты. Например, если 2 графика занимают половину пространства, тогда каждому приходится по 1/2 доли. Макетные координаты определяются двумя характеристиками:

  • Начальными координатами: (0,0) в (layout.margin.l, layout.margin.b);
  • Шириной и высотой: (1,1) в (layout.width-layout.margin.r, layout.height-layout.margin.t).

Значения макетных координат может быть меньше 0 и больше 1, тогда они относятся к областям в пределах границ фигуры.

Декартовая система координат

Наиболее часто используемый тип графических окон (subplots) Plotly — это двумерные графики в декартовой системе координат. Фигуры таких окон поддерживают атрибуты xaxis и yaxis, значения которых должны относиться к соответствующим частям фигуры. Например, xaxis=»x» и yaxis=»y» (значения по умолчанию) отрисовывает трейс на пересечении осей, которые определены в layout.xaxis и layout.yaxis. А вот трейс с xaxis=»x2″ и yaxis=»y3″ соответствует layout.xaxis2 и layout.yaxis3. Атрибуты layout.xaxis и layout.xaxis2 могут быть не прописаны явно, это значит, что они имеют значения по умолчанию.
Оси X и Y имеют свой тип (type), который может быть представлен:

  1. Непрерывными значениями (type=»linear», type=»log»)
  2. Временными значениями (type=»date»), что соответствует датам
  3. Категориальными значениями (type=»category», type=»multicategory)

Что насчет Dash?

Dash — открытый Python-фреймворк для построения веб-приложений с поддержкой визуализации данных. Все построенные фигуры Plotly могут быть запросто интегрированы в Dash-приложение. Вы можете ознакомиться со встраиванием фигур в Dash вот здесь.

 

 

Ещё больше подробностей о визуализации данных в Plotly на примерах реальных задач Data Science, вы узнаете на специализированном курсе «VIP: Визуализация данных на языке Python» в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.

Источники
  1. https://plotly.com/python/figure-structure/

Добавить комментарий

Поиск по сайту