折れ線グラフライブラリ比較
6つの人気ライブラリで時系列データを表示し、実装方法とスタイルを比較
1. Recharts
滑らかな曲線とアニメーションで時系列データの推移を視覚化
'use client';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';
const data = [
{ month: '1月', 売上: 4200, 目標: 4000 },
{ month: '2月', 売上: 3800, 目標: 4000 },
{ month: '3月', 売上: 5100, 目標: 5000 },
{ month: '4月', 売上: 4600, 目標: 4500 },
{ month: '5月', 売上: 5400, 目標: 5000 },
{ month: '6月', 売上: 4900, 目標: 5000 },
];
export function RechartsLineChart() {
return (
<ResponsiveContainer width="100%" height={300}>
<LineChart data={data}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="month" />
<YAxis />
<Tooltip />
<Legend />
<Line type="monotone" dataKey="売上" stroke="#3b82f6" strokeWidth={2} dot={{ r: 4 }} />
<Line type="monotone" dataKey="目標" stroke="#10b981" strokeWidth={2} strokeDasharray="5 5" />
</LineChart>
</ResponsiveContainer>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Rechartsを使った折れ線グラフを実装してください。 - 使用ライブラリ: recharts(LineChart、Line、XAxis、YAxis、CartesianGrid、Tooltip、Legend、ResponsiveContainer) - サンプルデータ: 8ヶ月分の月別ユーザー数とセッション数のデータを用意すること - インタラクティブ: ホバー時にツールチップで正確な数値を表示すること - 凡例: 複数のデータ系列の凡例を表示すること - レスポンシブ: ResponsiveContainerで親要素の幅に応じてチャートサイズが変わるよう対応すること - データポイント: dotプロパティで各データ点にドットを表示し、activeDotでホバー時のドットサイズを変えること。曲線の種類はtype="monotone"を指定すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
2. Nivo
洗練されたデザインと豊富なカスタマイズオプション
'use client';
import { ResponsiveLine } from '@nivo/line';
const data = [
{
id: '売上',
data: [
{ x: '1月', y: 4200 }, { x: '2月', y: 3800 }, { x: '3月', y: 5100 },
{ x: '4月', y: 4600 }, { x: '5月', y: 5400 }, { x: '6月', y: 4900 },
],
},
{
id: '目標',
data: [
{ x: '1月', y: 4000 }, { x: '2月', y: 4000 }, { x: '3月', y: 5000 },
{ x: '4月', y: 4500 }, { x: '5月', y: 5000 }, { x: '6月', y: 5000 },
],
},
];
export function NivoLineChart() {
return (
<div style={{ height: 300 }}>
<ResponsiveLine
data={data}
margin={{ top: 20, right: 110, bottom: 50, left: 60 }}
xScale={{ type: 'point' }}
yScale={{ type: 'linear', min: 'auto' }}
axisBottom={{ tickRotation: 0 }}
colors={['#3b82f6', '#10b981']}
pointSize={6}
useMesh={true}
legends={[{ anchor: 'bottom-right', direction: 'column', itemWidth: 80, itemHeight: 20 }]}
/>
</div>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Nivoを使った折れ線グラフを実装してください。
- 使用ライブラリ: @nivo/line(ResponsiveLine)
- サンプルデータ: 8ヶ月分の月別ユーザー数とセッション数のデータをNivo形式({id, data: [{x, y}]})で用意すること
- インタラクティブ: ホバー時にツールチップで正確な数値を表示すること(useMesh: true)
- 凡例: 複数のデータ系列の凡例を表示すること
- レスポンシブ: ResponsiveLineで親要素の幅に応じてチャートサイズが変わるよう対応すること
- データポイント: pointSizeとpointColorでドットのスタイルを設定し、curveプロパティ(monotoneXなど)で曲線の形状を指定すること⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
3. Chart.js (react-chartjs-2)
高パフォーマンスで大量のデータポイントもスムーズに描画
'use client';
import { Line } from 'react-chartjs-2';
import {
Chart as ChartJS, CategoryScale, LinearScale, PointElement,
LineElement, Title, Tooltip, Legend,
} from 'chart.js';
ChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend);
const labels = ['1月', '2月', '3月', '4月', '5月', '6月'];
const data = {
labels,
datasets: [
{
label: '売上',
data: [4200, 3800, 5100, 4600, 5400, 4900],
borderColor: '#3b82f6',
backgroundColor: 'rgba(59, 130, 246, 0.1)',
tension: 0.4,
},
{
label: '目標',
data: [4000, 4000, 5000, 4500, 5000, 5000],
borderColor: '#10b981',
backgroundColor: 'rgba(16, 185, 129, 0.1)',
borderDash: [5, 5],
},
],
};
export function ChartJSLineChart() {
return <Line data={data} options={{ responsive: true, maintainAspectRatio: false }} height={300} />;
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Chart.js(react-chartjs-2)を使った折れ線グラフを実装してください。 - 使用ライブラリ: react-chartjs-2(Line)、chart.js(CategoryScale、LinearScale、PointElement、LineElement、Title、Tooltip、Legend) - サンプルデータ: 8ヶ月分の月別ユーザー数とセッション数のデータを用意すること - インタラクティブ: ホバー時にツールチップで正確な数値を表示すること - 凡例: 複数のデータ系列の凡例を表示すること - レスポンシブ: responsive: true、maintainAspectRatio: falseで親要素に合わせてサイズを調整すること - データポイント: datasetsのtensionパラメータで曲線の滑らかさを調整し、pointRadiusでドットサイズを設定すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
4. Plotly.js (react-plotly.js)
ズーム・パン・ホバーなどのインタラクティブ機能が標準装備。時系列データの詳細分析に最適。
チャートを読み込み中...
'use client';
import dynamic from 'next/dynamic';
const Plot = dynamic(() => import('react-plotly.js'), { ssr: false });
export function PlotlyLineChart() {
return (
<Plot
data={[{
type: 'scatter',
mode: 'lines+markers',
x: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月'],
y: [1200, 1400, 1800, 2200, 2600, 3000, 3200, 2800],
name: 'ユーザー数',
line: { color: '#6366f1', width: 2 },
}]}
layout={{ title: { text: '月別ユーザー数推移' }, height: 300, margin: { t: 40, b: 40, l: 60, r: 20 } }}
style={{ width: '100%' }}
config={{ responsive: true }}
/>
);
}5. Apache ECharts (echarts-for-react)
JSONベースの設定で直感的に記述できる高機能チャートライブラリ。スムーズな曲線も簡単に実装。
チャートを読み込み中...
smooth: true でスムーズな曲線を簡単に実装。 SSRには非対応のためdynamic importが必要。'use client';
import dynamic from 'next/dynamic';
const ReactECharts = dynamic(() => import('echarts-for-react'), { ssr: false });
export function EChartsLineChart() {
const option = {
tooltip: { trigger: 'axis' },
xAxis: { type: 'category', data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月'] },
yAxis: { type: 'value' },
series: [
{ name: 'ユーザー数', type: 'line', smooth: true, data: [1200, 1400, 1800, 2200, 2600, 3000, 3200, 2800] },
{ name: 'セッション数', type: 'line', smooth: true, data: [1800, 2100, 2600, 3100, 3700, 4200, 4500, 4000] },
],
};
return <ReactECharts option={option} style={{ height: 300 }} />;
}6. ApexCharts (react-apexcharts)
JSONベースの設定で直感的に記述でき、ズーム・パン・ツールバーが標準装備。スムーズな曲線もオプション一つで設定できる。
チャートを読み込み中...
'use client';
import dynamic from 'next/dynamic';
const Chart = dynamic(() => import('react-apexcharts'), { ssr: false });
export function ApexLineChart() {
const options = {
chart: { type: 'line' as const, toolbar: { show: false } },
xaxis: { categories: ['1月', '2月', '3月', '4月', '5月', '6月'] },
stroke: { curve: 'smooth' as const, width: 2 },
markers: { size: 4 },
dataLabels: { enabled: false },
colors: ['#3b82f6', '#10b981'],
tooltip: { y: { formatter: (val: number) => val.toLocaleString() } },
};
const series = [
{ name: '売上', data: [4200, 3800, 5100, 4600, 5400, 4900] },
{ name: '目標', data: [4000, 4000, 5000, 4500, 5000, 5000] },
];
return <Chart type="line" options={options} series={series} height={300} width="100%" />;
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、ApexChartsを使った折れ線グラフを実装してください。 - 使用ライブラリ: react-apexcharts + apexcharts - Next.js App Router環境のため dynamic import で SSR を無効化 - サンプルデータ: 6ヶ月分の月別売上と目標値 - stroke.curve: 'smooth' でスムーズな曲線を表示 - ホバー時にツールチップで数値を表示 - 親要素の幅に合わせてレスポンシブ対応
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
ライブラリ比較
| ライブラリ | 曲線の種類 | エリア塗りつぶし | 大量データ | おすすめ用途 |
|---|---|---|---|---|
| Recharts | monotone, linear, step | ◯ | △ | ダッシュボード |
| Nivo | 多数のカーブタイプ | ◎ | △ | プレゼンテーション |
| Chart.js | linear, monotone | ◯ | ◎ | リアルタイムデータ |
| Plotly.js | linear, spline | ◯ | ◯ | 科学系・統計分析 |
| Apache ECharts | linear, smooth | ◎ | ◯ | エンタープライズダッシュボード |
| ApexCharts | smooth, straight, stepline | ◎ | ◯ | ダッシュボード・業務アプリ全般 |
折れ線グラフの選択ポイント
- •Recharts: Reactアプリで一般的な時系列データを表示する場合。 インタラクティブなツールチップが必要な場合に最適。
- •Nivo: エリアチャートや複雑なスタイリングが必要な場合。 プレゼンテーションやレポート向けの美しいビジュアルが欲しい時。
- •Chart.js: リアルタイムデータの更新や、数千以上のデータポイントを 扱う場合。パフォーマンスが最優先の時に選択。
- •Plotly.js: ズーム・パン・ホバーなどのインタラクティブ機能が標準装備で、科学系・統計系グラフに特に強い。3Dグラフや等高線図など高度な可視化が必要な場合に最適。
- •Apache ECharts: カスタマイズ性が非常に高く、ダッシュボード構築に適している。JSONベースのオプション設定で複雑なグラフも宣言的に実装できる。
- •ApexCharts: JSONベースの設定で直感的に記述でき、ズーム・パン・ツールバーが標準装備。ダッシュボードや業務アプリに最適。
折れ線グラフの典型的な使用例
📊 時系列分析
売上、ユーザー数、アクセス数などの時間経過に伴う変化を追跡
📈 トレンド分析
データの傾向や周期性を視覚的に把握
🔄 比較分析
複数の指標を同時に表示して相関関係を分析
⚡ リアルタイム監視
サーバーメトリクス、株価、センサーデータなどのライブ更新
折れ線グラフ(ラインチャート)は、時系列または順序データの推移を線で結んで表現するグラフ。トレンドや変化のパターンを把握するのに適している。
株価・気温・売上推移・Webトラフィックなど、時系列データの変化を追跡する場面で幅広く使われる。
- •単一系列型
- •複数系列型(凡例付き)
- •曲線型(スムーズ補間)
- •ステップ型
- •データポイントマーカー付き型
📈 使用しているサンプルデータ(クリックで表示)
8ヶ月分の月別ユーザー数とセッション数のデータを使用しています。
関連する逆引きリファレンス
- → 色・スタイルのカスタマイズ(borderColor・fillOpacity など)
- → ツールチップのカスタマイズ(カスタムHTML・フォーマッタ)
- → 軸(Axis)の設定(ラベルフォーマット・対数スケール・複数軸)
- → レスポンシブ対応(コンテナ追従・アスペクト比・リサイズ)
- → アニメーション・トランジション(初期描画・データ更新・イージング)
- → 凡例(Legend)の配置・スタイル(位置・アイコン・系列トグル)
- → データラベルの表示(値・位置・フォーマッタ)
- → クリックイベント・インタラクション(クリック・ホバー・ブラシ選択)
- → グリッド線のカスタマイズ(表示制御・線スタイル・リファレンスライン)