エリアチャートライブラリ比較

3つの人気ライブラリでエリアチャートを表示し、塗りつぶし表現とスタイルを比較

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

8ヶ月分のWebサイトトラフィックデータ(ページビュー・訪問者数・新規ユーザー)を使用しています。

[
  {
    "month": "1月",
    "pageviews": 8500,
    "visitors": 3200,
    "newUsers": 1800
  },
  {
    "month": "2月",
    "pageviews": 9200,
    "visitors": 3600,
    "newUsers": 2100
  },
  {
    "month": "3月",
    "pageviews": 11000,
    "visitors": 4200,
    "newUsers": 2500
  },
  {
    "month": "4月",
    "pageviews": 12800,
    "visitors": 5100,
    "newUsers": 2900
  },
  {
    "month": "5月",
    "pageviews": 14500,
    "visitors": 5800,
    "newUsers": 3200
  },
  {
    "month": "6月",
    "pageviews": 13200,
    "visitors": 5400,
    "newUsers": 2800
  },
  {
    "month": "7月",
    "pageviews": 15800,
    "visitors": 6200,
    "newUsers": 3500
  },
  {
    "month": "8月",
    "pageviews": 14200,
    "visitors": 5600,
    "newUsers": 3000
  }
]

1. Recharts

専用のAreaChartコンポーネントでグラデーション付きの美しいエリアチャートを描画

✓ グラデーション対応✓ スタック対応✓ レスポンシブ
特徴: SVGのlinearGradientを活用した美しいグラデーション塗りつぶしが可能。 stackIdを設定すれば積み上げエリアチャートにも簡単に切り替えられます。
tsx
'use client';
import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';

const data = [
  { month: '1月', 売上: 4000, 費用: 2400 },
  { month: '2月', 売上: 3000, 費用: 1398 },
  { month: '3月', 売上: 5000, 費用: 2800 },
  { month: '4月', 売上: 4500, 費用: 3908 },
  { month: '5月', 売上: 6000, 費用: 4800 },
  { month: '6月', 売上: 5500, 費用: 3800 },
];

export function RechartsAreaChart() {
  return (
    <ResponsiveContainer width="100%" height={300}>
      <AreaChart data={data}>
        <CartesianGrid strokeDasharray="3 3" />
        <XAxis dataKey="month" />
        <YAxis />
        <Tooltip />
        <Legend />
        <Area type="monotone" dataKey="売上" stroke="#3b82f6" fill="#93c5fd" fillOpacity={0.6} />
        <Area type="monotone" dataKey="費用" stroke="#10b981" fill="#6ee7b7" fillOpacity={0.6} />
      </AreaChart>
    </ResponsiveContainer>
  );
}

🤖 AIプロンプトテンプレート

React + Tailwind CSSで、Rechartsを使ったエリアチャートを実装してください。

- 使用ライブラリ: recharts(AreaChart、Area、XAxis、YAxis、CartesianGrid、Tooltip、Legend、ResponsiveContainer)
- サンプルデータ: 月別Webサイトトラフィック(ページビュー数・訪問者数・新規ユーザー数)を用意すること
- インタラクティブ: ホバー時にツールチップで詳細な数値を表示すること
- 凡例: 各データ系列の凡例をチャートに表示すること
- レスポンシブ: ResponsiveContainerで親要素の幅に応じてチャートサイズが変わるよう対応すること
- スタイリング: SVGのlinearGradientを活用したグラデーション塗りつぶしでエリア部分を表現し、重なっても見やすいデザインにすること

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

2. Nivo

ResponsiveLineのenableAreaオプションで洗練されたエリアチャートを描画

✓ 透明度調整✓ カーブ種類豊富✓ D3.jsパワー
特徴: enableAreaとareaOpacityで簡単にエリアチャートに切り替え可能。 curveプロパティで多数の補間方式(monotoneX、cardinal、catmullRomなど)を選択できます。
tsx
'use client';
import { ResponsiveLine } from '@nivo/line';

const data = [
  {
    id: '売上',
    data: [
      { x: '1月', y: 4000 }, { x: '2月', y: 3000 }, { x: '3月', y: 5000 },
      { x: '4月', y: 4500 }, { x: '5月', y: 6000 }, { x: '6月', y: 5500 },
    ],
  },
];

export function NivoAreaChart() {
  return (
    <div style={{ height: 300 }}>
      <ResponsiveLine
        data={data}
        margin={{ top: 20, right: 20, bottom: 50, left: 60 }}
        xScale={{ type: 'point' }}
        yScale={{ type: 'linear', min: 0 }}
        enableArea={true}
        areaOpacity={0.4}
        axisBottom={{ tickRotation: 0 }}
        colors={['#3b82f6']}
        pointSize={6}
        useMesh={true}
      />
    </div>
  );
}

🤖 AIプロンプトテンプレート

React + Tailwind CSSで、Nivoを使ったエリアチャートを実装してください。

- 使用ライブラリ: @nivo/line(ResponsiveLine)
- サンプルデータ: 月別Webサイトトラフィック(ページビュー数・訪問者数・新規ユーザー数)を用意すること
- インタラクティブ: ホバー時にツールチップで詳細な数値を表示すること(useMesh: true)
- 凡例: 各データ系列の凡例をチャートに表示すること
- レスポンシブ: ResponsiveLineで親要素の幅に応じてチャートサイズが変わるよう対応すること
- スタイリング: enableAreaとareaOpacityでエリア部分の透明度を設定し、curveプロパティ(monotoneXなど)でラインの形状を指定すること

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

3. Chart.js (react-chartjs-2)

Lineチャートのfillオプションを有効にして高パフォーマンスなエリアチャートを実現

✓ Canvas高速描画✓ Fillerプラグイン✓ 大量データ対応
特徴: Fillerプラグインとfill: trueの組み合わせでエリアチャートを実現。 Canvas描画のため大量データポイントでもスムーズに動作します。
tsx
'use client';
import { Line } from 'react-chartjs-2';
import {
  Chart as ChartJS, CategoryScale, LinearScale, PointElement,
  LineElement, Title, Tooltip, Legend, Filler,
} from 'chart.js';

ChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, Filler);

const labels = ['1月', '2月', '3月', '4月', '5月', '6月'];

const data = {
  labels,
  datasets: [
    {
      label: '売上',
      data: [4000, 3000, 5000, 4500, 6000, 5500],
      borderColor: '#3b82f6',
      backgroundColor: 'rgba(59, 130, 246, 0.3)',
      fill: true,
    },
  ],
};

export function ChartJSAreaChart() {
  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、Filler、Tooltip、Legend)
- サンプルデータ: 月別Webサイトトラフィック(ページビュー数・訪問者数・新規ユーザー数)を用意すること
- インタラクティブ: ホバー時にツールチップで詳細な数値を表示すること
- 凡例: 各データ系列の凡例をチャートに表示すること
- レスポンシブ: responsive: true、maintainAspectRatio: falseで親要素に合わせてサイズを調整すること
- スタイリング: datasetsのfill: trueとFillerプラグインを組み合わせてエリアを塗りつぶし、backgroundColorにRGBAで透明度を設定すること

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

ライブラリ比較

ライブラリグラデーション積み上げ対応大量データおすすめ用途
Recharts◎(SVG定義)ダッシュボード
Nivo◯(透明度調整)プレゼンテーション
Chart.js◯(RGBA指定)リアルタイムデータ

エリアチャート vs 折れ線グラフ

📊 エリアチャートが適している場面

  • データの量や大きさを視覚的に強調したい場合
  • 複数データの累積や合計を表現したい場合
  • 時系列データの全体的なトレンドを把握したい場合

📈 折れ線グラフが適している場面

  • データの正確な値の比較が重要な場合
  • 多数の系列を重ねて表示する場合
  • 変動パターンの細かい違いを確認したい場合

エリアチャートの選択ポイント

  • Recharts: SVGグラデーションを活用した美しい塗りつぶしが魅力。 stackIdで積み上げエリアチャートも簡単に実装可能。
  • Nivo: enableAreaの切り替えだけで折れ線グラフからエリアチャートに変換可能。 多数のカーブ補間方式で表現の幅が広い。
  • Chart.js: Fillerプラグインで塗りつぶしを実現。Canvas描画のため 大量のデータポイントでもパフォーマンスが安定。

エリアチャートの典型的な使用例

📊 トラフィック分析

Webサイトのページビュー、訪問者数、セッション数の推移を視覚化

💰 売上・収益の推移

複数の収益源を積み上げて全体の売上トレンドを把握

📡 リソース使用量

CPU、メモリ、ネットワーク帯域のリソース消費をモニタリング

📈 マーケット分析

市場シェアの変動や複数商品の販売ボリュームの推移を比較

⚠️ エリアチャート使用時の注意点

  • データ系列が多すぎると塗りつぶしが重なって見づらくなる(2〜4系列が目安)
  • 透明度を適切に設定しないと背面のデータが隠れてしまう
  • 積み上げエリアチャートでは個別の値の読み取りが難しくなる場合がある
  • 正確な値の比較が目的の場合は棒グラフの方が適している