棒グラフライブラリ比較

6つの人気ライブラリで同じデータを表示し、実装方法とスタイルを比較。ECharts v6の軸ブレイク(Axis Break)デモも収録。

1. Recharts (shadcn/ui風)

React向けの宣言的なチャートライブラリ。shadcn/uiのChartsコンポーネントもRechartsをベースにしています。

✓ React向け✓ 宣言的✓ カスタマイズ容易
特徴: Reactコンポーネントとして実装でき、JSXで直感的に記述可能。 アニメーションやインタラクションが標準で組み込まれています。
tsx
'use client';
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';

const data = [
  { month: '1月', sales: 4200, target: 4000 },
  { month: '2月', sales: 3800, target: 4000 },
  { month: '3月', sales: 5100, target: 5000 },
  { month: '4月', sales: 4600, target: 4500 },
  { month: '5月', sales: 5400, target: 5000 },
  { month: '6月', sales: 4900, target: 5000 },
];

export function RechartsBarChart() {
  return (
    <ResponsiveContainer width="100%" height={300}>
      <BarChart data={data}>
        <CartesianGrid strokeDasharray="3 3" />
        <XAxis dataKey="month" />
        <YAxis />
        <Tooltip />
        <Legend />
        <Bar dataKey="sales" fill="#3b82f6" name="売上" radius={[4, 4, 0, 0]} />
        <Bar dataKey="target" fill="#10b981" name="目標" radius={[4, 4, 0, 0]} />
      </BarChart>
    </ResponsiveContainer>
  );
}

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

React + Tailwind CSSで、Rechartsを使った棒グラフを実装してください。
- 使用ライブラリ: recharts の BarChart
- サンプルデータ: 6ヶ月分の月別売上と目標値
- ホバー時にツールチップで数値を表示
- 凡例を表示
- 親要素の幅に合わせてレスポンシブ対応
- X軸に月名、Y軸に売上金額を表示

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

2. Nivo

D3.jsベースの高品質なReactチャートライブラリ。美しいデザインとアニメーションが特徴。

✓ D3.jsベース✓ 美しいデザイン✓ アニメーション豊富
特徴: D3.jsの強力な機能を活かしつつ、Reactで簡単に使用可能。 洗練されたデフォルトのデザインとスムーズなアニメーションが魅力。
tsx
'use client';
import { ResponsiveBar } from '@nivo/bar';

const data = [
  { month: '1月', sales: 4200, target: 4000 },
  { month: '2月', sales: 3800, target: 4000 },
  { month: '3月', sales: 5100, target: 5000 },
  { month: '4月', sales: 4600, target: 4500 },
  { month: '5月', sales: 5400, target: 5000 },
  { month: '6月', sales: 4900, target: 5000 },
];

export function NivoBarChart() {
  return (
    <div style={{ height: 300 }}>
      <ResponsiveBar
        data={data}
        keys={['sales', 'target']}
        indexBy="month"
        margin={{ top: 20, right: 130, bottom: 50, left: 60 }}
        padding={0.3}
        groupMode="grouped"
        colors={['#3b82f6', '#10b981']}
        borderRadius={4}
        legends={[{
          dataFrom: 'keys',
          anchor: 'bottom-right',
          direction: 'column',
          itemWidth: 100,
          itemHeight: 20,
        }]}
      />
    </div>
  );
}

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

React + Tailwind CSSで、Nivoを使った棒グラフを実装してください。
- 使用ライブラリ: @nivo/bar の ResponsiveBar
- サンプルデータ: 6ヶ月分の月別売上と目標値
- ホバー時にツールチップで数値を表示
- 凡例を表示
- 親要素の幅に合わせてレスポンシブ対応
- X軸に月名、Y軸に売上金額を表示

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

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

最も人気のあるJavaScriptチャートライブラリの一つ。シンプルで軽量、豊富なドキュメント。

✓ 軽量✓ 豊富なドキュメント✓ 高パフォーマンス
特徴: Canvas APIを使用しているため高パフォーマンス。 大量のデータポイントを扱う場合に特に効果的。react-chartjs-2でReactでも簡単に利用可能。
tsx
'use client';
import { Bar } from 'react-chartjs-2';
import {
  Chart as ChartJS, CategoryScale, LinearScale,
  BarElement, Title, Tooltip, Legend,
} from 'chart.js';

ChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend);

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

const data = {
  labels,
  datasets: [
    {
      label: '売上',
      data: [4200, 3800, 5100, 4600, 5400, 4900],
      backgroundColor: 'rgba(59, 130, 246, 0.8)',
    },
    {
      label: '目標',
      data: [4000, 4000, 5000, 4500, 5000, 5000],
      backgroundColor: 'rgba(16, 185, 129, 0.8)',
    },
  ],
};

export function ChartJSBarChart() {
  return <Bar data={data} options={{ responsive: true, maintainAspectRatio: false }} height={300} />;
}

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

React + Tailwind CSSで、Chart.jsを使った棒グラフを実装してください。
- 使用ライブラリ: react-chartjs-2 の Bar
- サンプルデータ: 6ヶ月分の月別売上と目標値
- ホバー時にツールチップで数値を表示
- 凡例を表示
- 親要素の幅に合わせてレスポンシブ対応
- X軸に月名、Y軸に売上金額を表示

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

4. Plotly.js (react-plotly.js)

ズーム・パン・ホバーなどのインタラクティブ機能が標準装備。科学系・統計系グラフに特に強い。

✓ ズーム・パン標準✓ 科学系グラフ✓ インタラクティブ

チャートを読み込み中...

特徴: ズーム・パン・ホバーなどのインタラクティブ機能が標準装備。 バンドルサイズが大きいため plotly.js-dist-min の使用を推奨。SSRには非対応のためdynamic importが必要。
tsx
'use client';
import dynamic from 'next/dynamic';
const Plot = dynamic(() => import('react-plotly.js'), { ssr: false });

export function PlotlyBarChart() {
  return (
    <Plot
      data={[
        {
          type: 'bar',
          x: ['1月', '2月', '3月', '4月', '5月', '6月'],
          y: [4200, 3800, 5100, 4600, 5400, 4900],
          name: '売上',
          marker: { color: '#6366f1' },
        },
        {
          type: 'bar',
          x: ['1月', '2月', '3月', '4月', '5月', '6月'],
          y: [4000, 4000, 5000, 4500, 5000, 5000],
          name: '目標',
          marker: { color: '#a5b4fc' },
        },
      ]}
      layout={{
        title: { text: '月別売上比較' },
        barmode: 'group',
        height: 300,
        margin: { t: 40, b: 40, l: 60, r: 20 },
      }}
      style={{ width: '100%' }}
      config={{ responsive: true }}
    />
  );
}

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

React + Tailwind CSSで、Plotly.jsを使った棒グラフを実装してください。
- 使用ライブラリ: react-plotly.js + plotly.js-dist-min
- Next.js App Router環境のため dynamic import で SSR を無効化
- サンプルデータ: 6ヶ月分の月別売上と目標値
- ホバー時にツールチップで数値を表示
- グループ棒グラフ(barmode: 'group')
- 親要素の幅に合わせてレスポンシブ対応

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

5. Apache ECharts (echarts-for-react)

Baiduが開発した高機能チャートライブラリ。JSONベースの設定で直感的に記述でき、カスタマイズ性が非常に高い。

✓ 高カスタマイズ性✓ ダッシュボード向け✓ JSONベース設定

チャートを読み込み中...

特徴: オプション設定がJSONベースで直感的。ダッシュボード構築に適しており、 複雑なグラフも宣言的に実装できる。SSRには非対応のためdynamic importが必要。
tsx
'use client';
import dynamic from 'next/dynamic';
const ReactECharts = dynamic(() => import('echarts-for-react'), { ssr: false });

export function EChartsBarChart() {
  const option = {
    tooltip: { trigger: 'axis' },
    legend: { data: ['売上', '目標'], top: 'top' },
    xAxis: { type: 'category', data: ['1月', '2月', '3月', '4月', '5月', '6月'] },
    yAxis: { type: 'value' },
    series: [
      { name: '売上', type: 'bar', data: [4200, 3800, 5100, 4600, 5400, 4900] },
      { name: '目標', type: 'bar', data: [4000, 4000, 5000, 4500, 5000, 5000] },
    ],
  };
  return <ReactECharts option={option} style={{ height: 300 }} />;
}

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

React + Tailwind CSSで、Apache EChartsを使った棒グラフを実装してください。
- 使用ライブラリ: echarts-for-react + echarts
- Next.js App Router環境のため dynamic import で SSR を無効化
- サンプルデータ: 6ヶ月分の月別売上と目標値
- ホバー時にツールチップで数値を表示
- 凡例を表示
- JSONベースの option オブジェクトで設定

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

6. ApexCharts (react-apexcharts)

JSONベースの設定で直感的に記述でき、ズーム・パン・ツールバーが標準装備。ダッシュボードや業務アプリに最適なモダンチャートライブラリ。

✓ ズーム・パン標準✓ JSONベース設定✓ ダッシュボード向け

チャートを読み込み中...

特徴: JSONベースのオプション設定で直感的に記述でき、ズーム・パン・ツールバーが標準装備。SSRには非対応のためdynamic importが必要。
tsx
'use client';
import dynamic from 'next/dynamic';
const Chart = dynamic(() => import('react-apexcharts'), { ssr: false });

export function ApexBarChart() {
  const options = {
    chart: { type: 'bar' as const, toolbar: { show: false } },
    xaxis: { categories: ['1月', '2月', '3月', '4月', '5月', '6月'] },
    plotOptions: { bar: { borderRadius: 4, columnWidth: '60%' } },
    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="bar" options={options} series={series} height={300} width="100%" />;
}

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

React + Tailwind CSSで、ApexChartsを使った棒グラフを実装してください。
- 使用ライブラリ: react-apexcharts + apexcharts
- Next.js App Router環境のため dynamic import で SSR を無効化
- サンプルデータ: 6ヶ月分の月別売上と目標値
- ホバー時にツールチップで数値を表示
- 親要素の幅に合わせてレスポンシブ対応

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

7. Apache ECharts — 軸ブレイク(Axis Break)

値の差が極端に大きいデータを扱うとき、通常の棒グラフでは小さい値の差が見えにくくなる。軸ブレイク(zigzag)を使うと、y軸の一部を省略して表示でき、全体のバランスを保ちながら小さな差も確認できる。クリックで省略部分を展開することも可能。

✓ ECharts v6 新機能✓ 軸省略で可読性向上✓ クリックで展開可能

チャートを読み込み中...

ポイント: AxisBreakecharts/features からインポートして登録する必要がある。yAxis.breaksstart/end でデータに合わせて省略範囲を指定する。
tsx
'use client';
import dynamic from 'next/dynamic';
import * as echarts from 'echarts/core';
import { AxisBreak } from 'echarts/features';
echarts.use([AxisBreak]);
const ReactECharts = dynamic(() => import('echarts-for-react'), { ssr: false });

const data = [
  { name: 'A社', value: 120 },
  { name: 'B社', value: 980 },
  { name: 'C社', value: 95 },
  { name: 'D社', value: 140 },
  { name: 'E社', value: 110 },
];

export function EChartsAxisBreakChart() {
  const option = {
    tooltip: {
      trigger: 'axis',
      axisPointer: { type: 'shadow' },
    },
    xAxis: {
      type: 'category',
      data: data.map(d => d.name),
    },
    yAxis: {
      type: 'value',
      breaks: [
        { start: 250, end: 800 },
      ],
    },
    series: [
      {
        type: 'bar',
        data: data.map(d => d.value),
        itemStyle: { color: '#6366f1' },
      },
    ],
  };
  return <ReactECharts option={option} style={{ height: 300 }} />;
}

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

React + Tailwind CSSで、Apache ECharts v6の軸ブレイク(Axis Break)機能を使った棒グラフを実装してください。
- 使用ライブラリ: echarts-for-react + echarts
- Next.js App Router環境のため dynamic import で SSR を無効化
- AxisBreak を echarts/features からインポートして echarts.use() で登録する
- 値の差が極端に大きいサンプルデータ(例: A社120、B社980、C社95)
- yAxis.breaks で省略範囲(start/end)を指定してy軸の一部を zigzag 表示
- ホバー時にツールチップで数値を表示

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

ライブラリ比較

ライブラリレンダリング学習コストカスタマイズ性おすすめ用途
RechartsSVGReact アプリ全般
NivoSVGデザイン重視のダッシュボード
Chart.jsCanvas大量データ・高パフォーマンス
Plotly.jsSVG/WebGL科学系・統計系グラフ
Apache EChartsCanvas/SVG非常に高いエンタープライズダッシュボード
ApexChartsSVGダッシュボード・業務アプリ全般

選択のポイント

  • Recharts: Reactプロジェクトで標準的なチャートが必要な場合。 shadcn/uiと組み合わせる場合にも最適。
  • Nivo: デザイン性を重視し、美しいアニメーションが欲しい場合。 ダッシュボードやプレゼンテーション向け。
  • Chart.js: 大量のデータポイントを扱う場合や、 パフォーマンスが重要な場合。広く使われているため情報も豊富。
  • Plotly.js: ズーム・パン・ホバーなどのインタラクティブ機能が標準装備で、科学系・統計系グラフに特に強い。3Dグラフや等高線図など高度な可視化が必要な場合に最適。バンドルサイズが大きいため plotly.js-dist-min の使用を推奨。
  • Apache ECharts: Baiduが開発した高機能チャートライブラリ。カスタマイズ性が非常に高く、ダッシュボード構築に適している。EChartsのオプション設定はJSONベースで直感的に書けるため、複雑なグラフも宣言的に実装できる。
  • ApexCharts: JSONベースの設定で直感的に記述でき、ズーム・パン・ツールバーが標準装備。ダッシュボードや業務アプリに最適。学習コストが低く導入しやすい。

棒グラフ(バーチャート)は、カテゴリ別のデータを棒の長さで比較するグラフ。数値の大小を直感的に伝えられる最も基本的なグラフの一つ。

商品別売上・部門別実績・アンケート結果など、カテゴリ間の数値比較を行う場面で幅広く使われる。

主なバリエーション
  • 縦棒型(VerticalBar)
  • 横棒型(HorizontalBar)
  • グループ棒型(複数系列)
  • 積み上げ棒型
  • ラベル付き型

📊 使用しているサンプルデータ(クリックで表示)

6ヶ月分の月別売上と目標のデータを使用しています。

関連する逆引きリファレンス