react-apexcharts vs react-chartjs-2 vs react-highcharts vs recharts
React用のチャートライブラリ
react-apexchartsreact-chartjs-2react-highchartsrecharts類似パッケージ:

React用のチャートライブラリ

React用のチャートライブラリは、データを視覚化するための強力なツールです。これらのライブラリは、開発者がインタラクティブで魅力的なチャートを簡単に作成できるように設計されています。各ライブラリは異なる機能やスタイルを提供し、特定のニーズやプロジェクト要件に応じて選択することが重要です。

npmのダウンロードトレンド

3 年

GitHub Starsランキング

統計詳細

パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
react-apexcharts01,39967.3 kB62ヶ月前SEE LICENSE IN LICENSE
react-chartjs-206,92655.1 kB1077ヶ月前MIT
react-highcharts01,248-637年前-
recharts027,1186.76 MB4562ヶ月前MIT

機能比較: react-apexcharts vs react-chartjs-2 vs react-highcharts vs recharts

カスタマイズ性

  • react-apexcharts:

    ApexChartsは、色、フォント、スタイルなどの詳細なカスタマイズが可能で、デザインの自由度が高いです。特に、アニメーションやトランジションの設定が豊富で、視覚的に魅力的なチャートを作成できます。

  • react-chartjs-2:

    Chart.jsのシンプルなAPIを利用しており、基本的なカスタマイズが可能です。色やラベルの変更は簡単ですが、複雑なカスタマイズには限界があります。

  • react-highcharts:

    Highchartsは、非常に多くのオプションが用意されており、複雑なチャートやデータセットに対しても柔軟に対応できます。詳細なカスタマイズが可能で、商用プロジェクトにも適しています。

  • recharts:

    Rechartsは、Reactのコンポーネントとして設計されており、プロパティを通じて簡単にカスタマイズできます。特に、Reactの状態管理と組み合わせることで、動的なデータ更新が容易です。

パフォーマンス

  • react-apexcharts:

    ApexChartsは、軽量で高速な描画を実現しており、大量のデータを扱う場合でもスムーズに動作します。特に、インタラクティブな要素が多い場合でもパフォーマンスが維持されます。

  • react-chartjs-2:

    Chart.jsは、軽量でありながら、基本的なチャートの描画において優れたパフォーマンスを発揮します。ただし、非常に大きなデータセットを扱う場合には、パフォーマンスが低下する可能性があります。

  • react-highcharts:

    Highchartsは、複雑なチャートを描画する際に高いパフォーマンスを発揮しますが、商用ライセンスが必要です。データ量が多い場合でも、適切に最適化された描画が可能です。

  • recharts:

    Rechartsは、Reactの仮想DOMを活用しており、必要な部分だけを再描画するため、パフォーマンスが良好です。特に、動的なデータ更新に強いです。

学習曲線

  • react-apexcharts:

    ApexChartsは、豊富なドキュメントとサンプルが提供されており、比較的簡単に学習できます。特に、インタラクティブなチャートを作成するための直感的なAPIが特徴です。

  • react-chartjs-2:

    Chart.jsのシンプルさから、初心者でもすぐに使い始めることができます。基本的なチャートを作成するのに必要な知識が少なくて済みます。

  • react-highcharts:

    Highchartsは多機能ですが、その分学習曲線がやや急です。多くのオプションがあるため、使いこなすには時間がかかるかもしれません。

  • recharts:

    Rechartsは、Reactに特化しているため、Reactの知識があればすぐに使い始めることができます。コンポーネントベースのアプローチが直感的で、学習が容易です。

サポートされるチャートの種類

  • react-apexcharts:

    ApexChartsは、折れ線グラフ、棒グラフ、円グラフ、散布図、レーダーチャートなど、幅広いチャートタイプをサポートしています。特に、複雑なデータを視覚化するための多様なオプションがあります。

  • react-chartjs-2:

    Chart.jsは、基本的なチャートタイプ(折れ線グラフ、棒グラフ、円グラフなど)をサポートしており、シンプルなデータ視覚化に適しています。

  • react-highcharts:

    Highchartsは、非常に多くのチャートタイプをサポートしており、特にビジネス向けの複雑なデータ視覚化に強みがあります。

  • recharts:

    Rechartsは、基本的なチャートタイプをサポートしており、特にReactとの統合がスムーズです。シンプルなデータ視覚化に適しています。

ドキュメンテーションとコミュニティ

  • react-apexcharts:

    ApexChartsは、詳細なドキュメントと活発なコミュニティがあり、サポートを受けやすいです。多くのサンプルコードが提供されており、学習がスムーズです。

  • react-chartjs-2:

    Chart.jsは広く使われているため、豊富なリソースとサポートが存在します。ドキュメントも充実しており、初心者にとっても取り組みやすいです。

  • react-highcharts:

    Highchartsは商用ライセンスが必要ですが、ドキュメントが非常に充実しており、サポートも手厚いです。

  • recharts:

    Rechartsは、Reactに特化したライブラリであり、Reactのエコシステムにおけるリソースが豊富です。ドキュメントも明確で、学習が容易です。

選び方: react-apexcharts vs react-chartjs-2 vs react-highcharts vs recharts

  • react-apexcharts:

    ApexChartsは、豊富なオプションとカスタマイズ機能を提供し、インタラクティブなチャートを簡単に作成できます。特に、アニメーションやレスポンシブデザインを重視する場合に適しています。

  • react-chartjs-2:

    Chart.jsに基づいており、シンプルで使いやすいAPIを提供します。基本的なチャートを迅速に実装したい場合や、軽量なライブラリを求める場合に最適です。

  • react-highcharts:

    Highchartsは、商用利用に対してライセンスが必要ですが、非常に多機能で、複雑なチャートを作成するのに適しています。データの視覚化において高い柔軟性が求められる場合に選択すべきです。

  • recharts:

    Rechartsは、Reactに特化した設計で、コンポーネントベースのアプローチを採用しています。シンプルで直感的な構文を持ち、Reactのエコシステムにスムーズに統合できるため、React開発者にとって使いやすい選択肢です。

react-apexcharts のREADME

build ver

React.js wrapper for ApexCharts to build interactive visualizations in react.

Download and Installation

Installing via npm
npm install react-apexcharts apexcharts

Usage

Client-Side Usage (Traditional)

import Chart from 'react-apexcharts'

To create a basic bar chart with minimal configuration, write as follows:

class App extends Component {
  constructor(props) {
    super(props);

    this.state = {
      options: {
        chart: {
          id: 'apexchart-example'
        },
        xaxis: {
          categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999]
        }
      },
      series: [{
        name: 'series-1',
        data: [30, 40, 35, 50, 49, 60, 70, 91, 125]
      }]
    }
  }
  render() {
    return (
      <Chart options={this.state.options} series={this.state.series} type="bar" width={500} height={320} />
    )
  }
}

This will render the following chart

How do I update the chart?

Simple! Just change the series or any option and it will automatically re-render the chart.

View this example on codesandbox

Server-Side Rendering (SSR) with Next.js App Router

New in v2.0.0: react-apexcharts now supports Server-Side Rendering with Next.js 13+ App Router using ApexCharts v5.5.0+.

Server Component (RSC)

Render charts on the server for faster initial page loads:

import Chart from 'react-apexcharts/server'

export default async function DashboardPage() {
  const series = [{
    name: 'series-1',
    data: [30, 40, 35, 50, 49, 60, 70, 91, 125]
  }]

  const options = {
    chart: { id: 'apexchart-example' },
    xaxis: { categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999] }
  }

  return (
    <Chart
      type="bar"
      series={series}
      options={options}
      width={500}
      height={320}
    />
  )
}

With Client-Side Hydration

For interactive charts, combine server rendering with client-side hydration:

// app/dashboard/page.tsx (Server Component)
import Chart from 'react-apexcharts/server'
import ChartHydrate from './ChartHydrate'

export default async function DashboardPage() {
  const series = [{ data: [30, 40, 35, 50, 49, 60, 70] }]
  const options = { chart: { type: 'bar' }, xaxis: { categories: ['A', 'B', 'C', 'D', 'E', 'F', 'G'] } }

  return (
    <div>
      <Chart type="bar" series={series} options={options} width={500} height={300} />
      <ChartHydrate />
    </div>
  )
}
// app/dashboard/ChartHydrate.tsx (Client Component)
'use client'
import Hydrate from 'react-apexcharts/hydrate'

export default function ChartHydrate() {
  return (
    <Hydrate
      className="my-chart"
      clientOptions={{
        chart: {
          animations: {
            enabled: true,
            speed: 800
          }
        }
      }}
    />
  )
}

Client-Only Usage in Next.js

For client-only rendering (same as before):

'use client'
import Chart from 'react-apexcharts'

export default function ClientChart() {
  const options = {
    chart: { id: 'apexchart-example' },
    xaxis: { categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999] }
  }

  const series = [{
    name: 'series-1',
    data: [30, 40, 35, 50, 49, 60, 70, 91, 125]
  }]

  return <Chart type="bar" series={series} options={options} />
}

Important: While updating the options, make sure to update the outermost property even when you need to update the nested property.

✅ Do this

this.setState({
  options: {
    ...this.state.options,
    xaxis: {
      ...this.state.options.xaxis,
      categories: ['X1', 'X2', 'X3']
    }
  }
})

❌ Not this

this.setState({
  options.xaxis.categories: ['X1', 'X2', 'X3']
})

Tree-Shaking (Smaller Bundles)

New in v2.1.0: Use the /core export to reduce your bundle size by only importing the chart types and features you actually use. This requires apexcharts >=5.10.1.

// Instead of:
import Chart from 'react-apexcharts'

// Use the core variant:
import Chart from 'react-apexcharts/core'

// Then manually register only what you need:
import 'apexcharts/bar'                  // bar / column chart type
import 'apexcharts/line'                 // line / area / scatter chart type
import 'apexcharts/features/legend'      // legend feature
import 'apexcharts/features/annotations' // annotations feature
// ... etc.

Full example:

import Chart from 'react-apexcharts/core'
import 'apexcharts/bar'
import 'apexcharts/features/legend'

export default function BarChart() {
  const series = [{ name: 'Sales', data: [30, 40, 35, 50, 49, 60, 70, 91, 125] }]
  const options = {
    chart: { id: 'bar-chart' },
    xaxis: { categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999] }
  }

  return <Chart type="bar" series={series} options={options} width={500} height={320} />
}

The core variant also has SSR and hydration counterparts:

import Chart from 'react-apexcharts/core/server'   // Server Component (async)
import Hydrate from 'react-apexcharts/core/hydrate' // Client hydration

Note for Vite users: Add resolve: { dedupe: ['apexcharts'] } to your vite.config.js to prevent Vite from loading two separate ApexCharts instances when mixing imports.

Props

PropTypeDescription
seriesArrayThe series is a set of data. To know more about the format of the data, checkout Series docs on the website.
typeStringline, area, bar, pie, donut, scatter, bubble, heatmap, radialBar
widthNumber or StringPossible values for width can be 100%, 400px or 400 (by default is 100%)
heightNumber or StringPossible values for height can be 100%, 300px or 300 (by default is auto)
optionsObjectThe configuration object, see options on API (Reference)
chartRefReact.RefObjectPass a ref to get access to the underlying ApexCharts instance for imperative API calls

How to call methods of ApexCharts programmatically?

Sometimes, you may want to call other methods of the core ApexCharts library, and you can do so on ApexCharts global variable directly

Example

ApexCharts.exec('reactchart-example', 'updateSeries', [{
  data: [40, 55, 65, 11, 23, 44, 54, 33]
}])

More info on the .exec() method can be found here

All other methods of ApexCharts can be called this way

What's included

The published package includes the following files.

react-apexcharts/
├── dist/
│   ├── react-apexcharts.cjs.js          # CommonJS (default import)
│   ├── react-apexcharts.esm.js          # ES Module (default import)
│   ├── react-apexcharts.iife.min.js     # IIFE for browser <script> tags
│   ├── react-apexcharts.min.js          # CommonJS (backward compat alias)
│   ├── react-apexcharts-server.esm.js   # react-apexcharts/server
│   ├── react-apexcharts-hydrate.esm.js  # react-apexcharts/hydrate
│   ├── react-apexcharts-core.cjs.js     # react-apexcharts/core (CJS)
│   ├── react-apexcharts-core.esm.js     # react-apexcharts/core (ESM)
│   ├── react-apexcharts-core-server.esm.js   # react-apexcharts/core/server
│   └── react-apexcharts-core-hydrate.esm.js  # react-apexcharts/core/hydrate
└── types/
    ├── react-apexcharts.d.ts
    ├── react-apexcharts-server.d.ts
    ├── react-apexcharts-hydrate.d.ts
    ├── react-apexcharts-core.d.ts
    ├── react-apexcharts-core-server.d.ts
    └── react-apexcharts-core-hydrate.d.ts

Development

Install dependencies

npm install

Running the example

Basic example including update is included to show how to get started using ApexCharts with React easily.

To run the examples,

cd example
npm install
npm run start

Bundling

To build
npm run build

License

ApexCharts is offered under a dual-license model to support individuals, startups, and commercial products of all sizes. Read full license agreements here: https://apexcharts.com/license