apexcharts、chart.js、d3、highcharts は、すべて Web アプリケーションでデータを視覚化するための JavaScript ライブラリですが、描画エンジン、設定方法、ライセンスモデル、そして柔軟性が大きく異なります。chart.js は Canvas を使用し、シンプルな標準グラフに最適です。apexcharts と highcharts は SVG ベースで、豊富なインタラクション機能を標準搭載しています。一方、d3 は特定のグラフ型を提供せず、DOM 操作を通じて完全にカスタマイズ可能な視覚化を実現する低レベルライブラリです。
apexcharts、chart.js、d3、highcharts は、フロントエンド開発においてデータを視覚化するための代表的なライブラリです。これらはすべてグラフを描画できますが、内部の仕組み、開発者の負担、そしてコストモデルが全く異なります。アーキテクチャ選定においては、単に見た目だけでなく、描画方式やライセンス条件を深く理解する必要があります。
描画エンジンの違いは、パフォーマンスとカスタマイズ性に直結します。
chart.js は Canvas を使用します。
// chart.js: Canvas コンテキストを使用
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'bar',
data: { labels: ['A', 'B'], datasets: [{ data: [1, 2] }] }
});
apexcharts と highcharts は SVG を使用します。
// apexcharts: SVG ベースの設定
const options = {
chart: { type: 'bar' },
series: [{ name: 'Sales', data: [1, 2] }]
};
const chart = new ApexCharts(document.querySelector('#chart'), options);
// highcharts: SVG ベースの設定
Highcharts.chart('container', {
chart: { type: 'bar' },
series: [{ data: [1, 2] }]
});
d3 は DOM 操作そのもの です。
// d3: SVG 要素を直接操作
const svg = d3.select('#chart').append('svg');
svg.selectAll('rect')
.data([1, 2])
.enter()
.append('rect')
.attr('width', d => d * 10);
ライブラリによって、グラフを定義するアプローチが異なります。
chart.js、apexcharts、highcharts は、設定オブジェクトを渡すだけでグラフが完成します。
// chart.js: 設定オブジェクトで完結
const config = { type: 'line', data: { datasets: [...] } };
// apexcharts: 系列とチャート設定を分離
const options = { series: [{ data: [...] }], chart: { type: 'line' } };
// highcharts: 伝統的な設定構造
const options = { series: [{ data: [...] }], chart: { type: 'line' } };
d3 は、データバインディングとスケール変換を manualmente 記述します。
// d3: スケールと軸を手動で定義
const x = d3.scaleLinear().domain([0, 10]).range([0, 100]);
const xAxis = d3.axisBottom(x);
svg.append('g').call(xAxis);
ツールチップ、ズーム、パンなどの機能実装コストも重要な選定基準です。
apexcharts と highcharts は、豊富なインタラクションを標準搭載しています。
// apexcharts: ツールチップやズームは標準機能
const options = {
chart: { zoomType: 'xy' }, // ズーム有効化
tooltip: { enabled: true } // ツールチップ有効化
};
chart.js は基本的なインタラクションを提供しますが、高度な機能はプラグイン依存です。
// chart.js: 基本的なインタラクション設定
const options = {
plugins: {
tooltip: { enabled: true },
zoom: { /* プラグイン設定が必要 */ }
}
};
d3 はすべて自作です。
// d3: イベント监听を手動で実装
svg.on('mousemove', (event) => {
const coords = d3.pointer(event);
// ツールチップの位置計算と表示ロジックを自力で実装
});
プロジェクトの予算と配布形態によって、選択肢が制限される場合があります。
chart.js、apexcharts、d3 は オープンソースライセンス です。
highcharts は 商用利用にはライセンス購入 が必要です。
// highcharts: 商用利用時はライセンスキー登録が必要
Highcharts.setOptions({
global: { useUTC: false }
// ライセンス購入後、キーを登録して警告を非表示にする
});
異なるアプローチを取っていますが、これらのライブラリには共通する目的と機能があります。
// 全ライブラリ共通:データ配列を渡す
const data = [10, 20, 30];
// chart.js, apexcharts, highcharts, d3 すべてこのデータを元に描画
// 全ライブラリ共通:DOM 要素を指定して描画
const container = document.getElementById('chart-container');
// この容器の中にグラフが描画される
d3 は最も自由度が高く、他は設定項目の範囲内で調整します。// 全ライブラリ共通:色の指定
const color = '#FF5733';
// 設定オブジェクトやスタイル属性で色を適用可能
| 特徴 | chart.js | apexcharts | highcharts | d3 |
|---|---|---|---|---|
| 描画エンジン | Canvas | SVG | SVG | DOM (SVG/Canvas) |
| 学習曲線 | 低い | 低い | 低い | 高い |
| インタラクション | 基本機能 | 豊富 | 非常に豊富 | 自作 |
| ライセンス | MIT (無料) | MIT (無料) | 商用有料 | BSD (無料) |
| カスタマイズ | 限定 | 中程度 | 中程度 | 無限 |
| 主な用途 | シンプルなグラフ | モダンなダッシュボード | 業務システム | 独自可視化 |
chart.js は、シンプルさ — 軽量化を最優先するプロジェクトに最適です。標準的なグラフで十分であり、バンドルサイズを抑えたい場合に適しています。
apexcharts は、現代の Web アプリケーション — 特に React や Vue を使用するプロジェクトに推奨されます。見た目が美しく、インタラクション機能も充実しており、無料で商用利用可能です。
highcharts は、予算があり — 安定性と包括的な機能を求めるエンタープライズ環境で真価を発揮します。ライセンスコストを許容できる場合、最も安心できる選択肢です。
d3 は、既存のライブラリでは実現できない — 独自の視覚化が必要な場合にのみ選択すべきです。学習コストは高いですが、表現力の限界はありません。
結論として、多くの現代フロントエンドプロジェクトでは、バランスの取れた apexcharts が第一候補となります。特殊な事情がない限り、これで十分すぎるほどの機能を提供してくれます。
モダンな SVG ベースのグラフを素早く実装したい場合に選択します。ドラッグアンドドロップやズームなどのインタラクション機能が標準で備わっており、React や Vue 用のラッパーも公式に提供されているため、現代のフレームワークとの親和性が高いです。
軽量でシンプルな実装を優先する場合に選択します。Canvas ベースのため大量のデータポイントを描画しても比較的軽快に動作し、設定も簡単です。標準的なグラフ类型で十分であり、複雑なカスタマイズが必要ないプロジェクトに向いています。
既存のグラフ型では表現できない、独自のカスタム視覚化が必要な場合に選択します。データに基づいて DOM 要素を直接操作するため、自由度は最高ですが、実装には SVG やデータバインディングに関する深い知識が必要になります。
エンタープライズ級の機能とサポートが必要で、商用ライセンスの購入が可能な場合に選択します。非常に多くのグラフ类型と機能を標準で提供しており、レガシーブラウザのサポートや複雑な業務システムでの安定性が求められる場面で威力を発揮します。

Modern, interactive JavaScript charts your users will love - built for dashboards, SaaS, and data-heavy UIs.
Live demos · Documentation · License
@types/* install needednpm install apexcharts
Or via CDN:
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
import ApexCharts from 'apexcharts'
const chart = new ApexCharts(document.querySelector('#chart'), {
chart: { type: 'bar' },
series: [{ name: 'Sales', data: [30, 40, 35, 50, 49, 60, 70, 91, 125] }],
xaxis: { categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999] }
})
chart.render()
Browse 100+ ready-to-use samples — copy, paste, ship.
Combine any of the above as mixed/combo charts, stacked variants, sparklines, or synchronized multi-chart layouts.
Official:
Community:
Render chart HTML on the server, then hydrate in the browser. Works with Next.js, Nuxt, SvelteKit, Astro, Remix, and any Node-based framework.
// Server
import ApexCharts from 'apexcharts/ssr'
const chartHTML = await ApexCharts.renderToHTML({
chart: { type: 'bar' },
series: [{ data: [30, 40, 35, 50, 49, 60, 70, 91, 125] }],
xaxis: { categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999] }
}, { width: 500, height: 300 })
// Returns hydration-ready HTML with embedded SVG
// Client
import ApexCharts from 'apexcharts/client'
ApexCharts.hydrate(document.getElementById('my-chart'))
// or: ApexCharts.hydrateAll()
No more dynamic(() => import(...), { ssr: false }) workarounds — the chart renders on the server and becomes interactive on hydration.
By default import ApexCharts from 'apexcharts' includes everything. For smaller bundles, import from apexcharts/core and add only what you need:
import ApexCharts from 'apexcharts/core' // bare class — no chart types, no features
// Chart types (match the value of chart.type)
import 'apexcharts/line'
import 'apexcharts/bar'
// import 'apexcharts/area'
// import 'apexcharts/scatter'
// Optional features
import 'apexcharts/features/legend'
import 'apexcharts/features/toolbar' // zoom/pan toolbar
// import 'apexcharts/features/exports' // SVG/PNG/CSV download
// import 'apexcharts/features/annotations'
// import 'apexcharts/features/keyboard' // keyboard navigation
See the tree-shaking guide for the complete list of entry points.
ApexCharts works in all modern evergreen browsers (Chrome, Firefox, Safari, Edge). For server-side rendering, Node.js 18+ is required.
npm install
npm run dev # vite build --watch
npm test # e2e + unit
See CONTRIBUTING.md for setup, coding conventions, and PR guidelines.
ApexCharts uses a revenue-based license:
Full terms: apexcharts.com/license
We've partnered with Infragistics, creators of Ignite UI — high-performance data grids that handle unlimited rows and columns, with custom templates and real-time updates.
Available for:
Angular · React · Blazor · Web Components · jQuery