Хабр, привет! Меня зовут Юра, я работаю в МТС Диджитал тимлидом. Сегодня хочу поговорить о визуализации данных в React: какую библиотеку выбрать, чтобы было красиво и без проблем? Recharts, Visx, Nivo, ECharts или, может, что-то еще? Давайте разбираться! В посте оценим восемь разных библиотек: возможности, плюсы и минусы. Поехали!

Recharts

Библиотека для визуализации данных в React, построенная на базе D3.js. Ее разработали с упором на простоту использования и декларативный подход. В итоге Recharts — то, что нужно для быстрого добавления графиков в проект без копания в D3.js. Логика работы управляется через React-компоненты, так что интеграция нативная и удобная.
Плюсы:
легко использовать: графики создаются декларативно через JSX;
хорошая документация и примеры;
много интерактивных элементов: ховеры, тултипы, кастомные метки;
гибкая настройка через пропсы.
Минусы:
ограниченная кастомизация в сравнении с чистым D3;
производительность страдает на очень больших объемах данных. Но для подавляющего большинства стандартных задач Recharts работает достаточно быстро;
не такой мощный, как Visx или ECharts.
Recharts поддерживает различные типы диаграмм: линейные, столбчатые, круговые, радарные и другие. Библиотека позволяет легко и просто кастомизировать внешний вид графиков, добавлять анимации, оси, легенды и интерактивные элементы. Хотя в основе Recharts лежит D3.js, он скрыт от пользователя — это упрощает настройку и позволяет управлять графиками с помощью JSX.
Visx

Не просто библиотека графиков, а набор утилит для работы с D3 внутри React. В отличие от Recharts, здесь нет готовых решений «из коробки» — разработчик сам собирает график из компонентов. Такой подход дает максимальную гибкость, но требует больше усилий. Но тут уж каждый выбирает сам, что ему по душе. Больше функций, но нужно время, чтобы разобраться? Или меньше возможностей с минимумом «ручного» труда?
Плюсы:
гибкость: можно строить практически любые графики, не ограничиваясь стандартными решениями;
оптимизирован для React: работает быстрее, чем чистый D3 в отдельных случаях, благодаря интеграции с React и его механизмами рендеринга;
хорош для сложных визуализаций.
Минусы:высокий порог входа: без опыта работы с D3.js будет сложно — нужно понимание как D3, так и React;нет готовых компонентов: все нужно строить с нуля;документация могла бы быть лучше: она не такая подробная, как у других библиотек, например Recharts.
Главное преимущество Visx — полная совместимость с D3.js. Можно использовать мощные возможности D3, но при этом работать в декларативном стиле React. Так что Visx — отличный вариант для сложных визуализаций и тех случаев, когда нужна глубокая кастомизация. Библиотека легковесная, так как применяет только нужные части D3, а не все целиком. Радостно!

Nivo

Библиотека, заточенная под стильные анимированные графики. Использует D3.js под капотом, но без кропотливой настройки. Почему? Все просто — у Nivo удобный API и готовые компоненты. Разработчик может быстро создавать симпатичные функциональные визуализации, и ему не нужно глубоко погружаться в D3.js.
Плюсы:
красивый дизайн графиков «из коробки»;
поддержка SVG и Canvas для разных задач;
легкость в использовании, понятный API.
Минусы:
не всегда подходит для сложных кастомных визуализаций;
в ряде случаев производительность уступает Visx. Особенно это проявляется при работе с большими объемами данных;
не так популярен, как Recharts, меньшее комьюнити.
Nivo поддерживает как SVG-, так и Canvas-рендеринг, подходит для больших объемов данных. В комплекте широкий набор диаграмм — от стандартных (линейных, столбчатых, круговых) до более специфичных, таких как санберсты, воронкообразные и хордовые диаграммы. Поддерживаются темы оформления, анимации и интерактивные элементы. Так что графики получаются не только информативными, но и красивыми.
BizCharts

Библиотека визуализации данных от Ant Design, созданная на базе G2.js. Ее ключевая особенность — декларативный стиль, который позволяет строить сложные диаграммы с минимальными усилиями. BizCharts прекрасно интегрируется в экосистему Ant Design, ее можно свободно применять в проектах, где используется этот UI-фреймворк.
Плюсы:
глубокая интеграция с Ant Design;
декларативный API упрощает создание графиков;
хорошая поддержка и документация.
Минусы:
меньше гибкости, чем у Visx и Nivo. Не подходит для сверхсложных кастомных визуализаций, где требуется полный контроль над каждым элементом;
может быть избыточной, если не применяется Ant Design, ведь сильные стороны библиотеки именно с этой экосистемой и связаны;
не так широко используется, как Recharts или Chart.js.
BizCharts поддерживает множество типов диаграмм, включая стандартные столбчатые, линейные, круговые и более сложные, например географические карты и диаграммы рассеяния. Есть интерактивные элементы — тултипы, ховеры, анимации и легенды.
React-financial-charts

Уже по названию можно понять, что React-financial-charts создана специально для финансовых визуализаций. Если нужно отобразить японские свечи, объемы торгов или технические индикаторы, то это одна из лучших библиотек в инструментарии разработчика.
Плюсы:
специализированное решение для финансовых данных;
хорошо оптимизирована для больших объемов;
много готовых индикаторов — SMA, EMA и так далее.
Минусы:
подходит только для финансовых графиков, универсального применения нет;
требует понимания принципов работы с финансами.
React-financial-charts основана на D3.js и оптимизирована для применения с большим объемом данных. Вместе с мощным инструментом по работе с финансовой информацией разработчик получает еще и бонусы — интерактивность, возможность кастомизации и интеграцию с потоковыми данными в реальном времени.
Victory

Мощная библиотека для визуализации данных, разработанная Formidable. Ее главная фишка — кроссплатформенность: один и тот же код можно использовать и для React, и для React Native. То есть Victory отлично подходит для проектов, где нужна единая кодовая база для веб- и мобильных приложений.
Плюсы:
поддержка как React, так и React Native;
простая и интуитивно понятная, новичок без проблем с ней разберется;
хорошо работает с анимациями, графики получаются плавными и отзывчивыми.
Минусы:
производительность уступает Visx и ECharts;
не хватает глубокой кастомизации: если проект требует нестандартной визуализации, лучше выбрать что-то еще.
Victory предлагает удобный API и множество готовых диаграмм. Она ориентирована на простоту и гибкость, поэтому отлично подходит для создания интерактивных визуализаций. Еще есть шаблоны анимации.
react-chartjs-2

Обертка над популярным Chart.js, которая адаптирует его для работы в React. Chart.js давно зарекомендовал себя как удобный инструмент для базовой визуализации данных, а react-chartjs-2 позволяет интегрировать его в React-приложения без головной боли у разработчика.
Плюсы:
простота в использовании;
хорошая производительность для несложных диаграмм;
высокая популярность и отличная документация.
Минусы:
ограниченная кастомизация;
не подходит для сложных визуализаций;
работает только с Canvas, нет SVG-рендеринга.
Chart.js хороша для простых диаграмм, но ее гибкость ограничена. Библиотека не так мощна, как Visx или ECharts, но зато проста в использовании. Она поддерживает анимации, интерактивные элементы и достаточно производительна.
ECharts for React

Адаптация мощной китайской библиотеки ECharts (разработана компанией Baidu) под React. Предназначена для работы с большими данными и поддерживает сложные визуализации: тепловые карты, географические диаграммы, 3D-графики.
Плюсы:
высокая производительность, поддержка WebGL;
возможность внедрения сложных визуализаций;
гибкость и кастомизация.
Минусы:
API требует времени на освоение, там не все так просто;
документация не то чтобы очень обширная, так что некоторые вещи придется изучать методом тыка;
тяжелее в настройке, чем Recharts или Nivo.
Главное преимущество ECharts — высокая производительность. Библиотека использует WebGL для ускоренного рендеринга. Это хороший вариант для интерактивных и сложных визуализаций. При этом у библиотеки обширный API и, соответственно, максимальная гибкость.
Ну и сводная таблица:
Библиотека | Особенности | Звезд на GitHub | Открытых Issues | Версия |
Recharts | Основана на React и D3.js, декларативный API, удобно использовать | 24,6K | 442 | 2.15.1 |
Visx | Низкоуровневые примитивы для визуализации, комбинация D3.js и React | 18K | 126 | 3.12.0 |
Nivo | SVG, HTML и Canvas-рендеринг, поддержка SSR, большое количество графиков | 13,3K | 122 | 0.88.0 |
BizCharts | Разработана Alibaba, подходит для бизнес-приложений, мощные шаблоны | 6,5K | 358 | 4.0.15 |
React-financial-charts | Ориентирована на финансовые диаграммы, поддержка временных рядов | 2,1K | 48 | 2.0.1 |
Victory | Гибкость и адаптируемость, декларативный подход, анимированные диаграммы | 10,4K | 89 | 37.3.6 |
react-chartjs-2 | Обертка над Chart.js для удобства работы в React, поддержка анимаций | 6,7K | 83 | 5.3.0 |
ECharts for React | Интеграция с Apache ECharts, мощные возможности для больших данных | 4,5K | 55 | 3.0.2
|
На сегодня все. Если можете порекомендовать что-то еще, обязательно пишите в комментариях.