折れ線グラフライブラリ比較

3つの人気ライブラリで時系列データを表示し、実装方法とスタイルを比較

📈 使用しているサンプルデータ

8ヶ月分の月別ユーザー数とセッション数のデータを使用しています。

[
  {
    "month": "1月",
    "users": 1200,
    "sessions": 1800
  },
  {
    "month": "2月",
    "users": 1400,
    "sessions": 2100
  },
  {
    "month": "3月",
    "users": 1800,
    "sessions": 2600
  },
  {
    "month": "4月",
    "users": 2200,
    "sessions": 3100
  },
  {
    "month": "5月",
    "users": 2600,
    "sessions": 3700
  },
  {
    "month": "6月",
    "users": 3000,
    "sessions": 4200
  },
  {
    "month": "7月",
    "users": 3200,
    "sessions": 4500
  },
  {
    "month": "8月",
    "users": 2800,
    "sessions": 4000
  }
]

1. Recharts

滑らかな曲線とアニメーションで時系列データの推移を視覚化

✓ スムーズなアニメーション✓ インタラクティブ✓ レスポンシブ
特徴: 曲線の種類(monotone、linear、step)を簡単に変更可能。 ホバー時のアニメーションやツールチップが標準で実装されています。
tsx
'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

洗練されたデザインと豊富なカスタマイズオプション

✓ 美しいデフォルト✓ エリアチャート対応✓ D3.jsパワー
特徴: エリアチャートへの切り替えが容易で、グラデーションなどの 高度なビジュアル表現も可能。ポイントのカスタマイズも豊富。
tsx
'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)

高パフォーマンスで大量のデータポイントもスムーズに描画

✓ Canvas描画✓ 高速✓ プラグイン豊富
特徴: Canvas APIを使用しているため、数千のデータポイントでも スムーズに動作。tensionパラメータで曲線の滑らかさを調整可能。
tsx
'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の回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

ライブラリ比較

ライブラリ曲線の種類エリア塗りつぶし大量データおすすめ用途
Rechartsmonotone, linear, stepダッシュボード
Nivo多数のカーブタイププレゼンテーション
Chart.jslinear, monotoneリアルタイムデータ

折れ線グラフの選択ポイント

  • Recharts: Reactアプリで一般的な時系列データを表示する場合。 インタラクティブなツールチップが必要な場合に最適。
  • Nivo: エリアチャートや複雑なスタイリングが必要な場合。 プレゼンテーションやレポート向けの美しいビジュアルが欲しい時。
  • Chart.js: リアルタイムデータの更新や、数千以上のデータポイントを 扱う場合。パフォーマンスが最優先の時に選択。

折れ線グラフの典型的な使用例

📊 時系列分析

売上、ユーザー数、アクセス数などの時間経過に伴う変化を追跡

📈 トレンド分析

データの傾向や周期性を視覚的に把握

🔄 比較分析

複数の指標を同時に表示して相関関係を分析

⚡ リアルタイム監視

サーバーメトリクス、株価、センサーデータなどのライブ更新