UIXHERO

Bar Chart(棒グラフ)

カテゴリごとの量を棒の長さで比べるチャート。ゼロ基線の扱い、並び順、縦横の選び方、しきい値の見せ方という設計判断と、色だけに頼らないアクセシビリティ要件を解説する。

2026年8月27日
更新: 2026年8月27日
24
by Dengen Yosho(DGYS)

カテゴリごとの量を、棒の長さで比べるチャートです。店舗別の売上、曜日別の来店数、チャネル別の獲得数のように、並んだ項目のどれが多くてどれが少ないかを一目で決めさせたいときに使います。

この記事を読むと、縦軸をゼロから始める理由、並び順の決め方、縦棒と横棒の選び分け、しきい値の超過を色だけで示さない書き方が自分でできるようになります。


1. UI例(Preview / Live)

実装で見る(GunjoUI)

この部品を、デザインシステム GUNJO の実装で確かめられます。

2. 定義(Definition)

棒グラフは、カテゴリごとの量を棒の長さに写して並べるチャートです。棒の始まりがそろっているため、読者は長さの差をそのまま量の差として読み取ります。この「長さ=量」という対応が、棒グラフの正確さと危うさの両方を作っています。

折れ線グラフとの違い:折れ線は点と点をつなぐことで「その間にも値が続いている」と主張します。棒グラフはつながないので、項目どうしが独立していてよく、順序が無くてもかまいません。曜日別の来店数のように、独立した項目を並べるなら棒グラフが向きます。

円グラフとの違い:円グラフは全体を 100 パーセントとした構成比を示します。棒グラフは実数をそのまま示すので、合計に意味が無いデータ(各店舗の売上など)でも使えます。

縦棒と横棒:向きが変わっても読み方は同じです。違うのはラベルの置き場所と、扱える項目数です。


3. 使い分け(When to use / When NOT to use)

3.1 When to use

  • カテゴリ別の量を比べる:店舗別、チャネル別、担当者別の実績を並べて多い順を決めたいとき
  • 少数の時点を比べる:四半期ごとの売上のように、点が数個しか無く、間の値に意味が無いとき
  • 上限や目標との距離を見せる:しきい値の線を重ねて、超えた項目を名指ししたいとき
  • ランキングを見せる:値の大きい順に並べた横棒は、順位表としてそのまま読めます

3.2 When NOT to use

  • 連続した時系列の傾向を見せたい:点が多いと棒が細くなり、傾向線が読めなくなります。折れ線を使います
  • 構成比を見せたい:合計に対する割合が主題なら、円グラフかドーナツチャート、または積み上げ棒を使います
  • 項目が 20 を超える:棒の判別が難しくなります。上位だけを出して残りを「その他」にまとめるか、表にします
  • 値が 1 つしか無い:棒 1 本のチャートは、数字をそのまま大きく出したほうが速く読めます

3.3 代替UI(Alternatives)


4. 設計判断の核(Decision Principles)

棒グラフの核は「棒の長さが量そのものである」こと。だから縦軸をゼロから始めない棒グラフは、数字を変えずに差を誇張する。

判断の優先順位:1. ゼロ基線、2. 並び順、3. 縦か横か、4. 基準線としきい値の見せ方。

  • 縦軸はゼロから始める:棒は長さで量を比べる図です。基線を途中から始めると、1 割の差が 3 倍の差に見えます。上ので基線を 55 に上げると、数字は 1 つも変えていないのに順位の印象が変わります。差が小さくて読み取れないときは、軸を切るのではなく、差そのものを別の値(前月比、目標との差)で出すか、折れ線に切り替えます。
  • 並び順は「読者が答えたい問い」で決める:どれが一番多いかを決めさせたいなら、値の大きい順に並べます。曜日別や月別のように順序に意味があるなら、値ではなく時間の順に並べます。同じ画面で並び順を毎回変えると、読者は毎回並びを読み直すことになります。
  • 項目名が長いなら横棒にする:縦棒でラベルが入らないと、文字を斜めにするか省略するかの選択になります。どちらも読む速度を落とします。横棒ならラベルは 1 行で左に置けて、項目が 7 つを超えても読み続けられます。
  • 基準線は「その線が何か」を書く:GUNJO(群青)は XHERO が作っているデザインシステムです。その BarChartaverageValue で平均線、threshold で上限線を引けます。線だけでは何の線か伝わらないので、averageLabelthresholdLabel に意味の分かる名前を入れます。「Average」のような既定値のまま出さないでください。
  • しきい値の超過を色だけに載せないthreshold を超えた棒は thresholdTone(既定は destructive)で塗られます。色が変わったこと自体は、色を区別しにくい読者には届きません。showValues で値を出し、超過した項目には文字でも印を付けます。これはチャートで最も繰り返し起きる粗さで、AI が作ったUIの失敗 29 件の 28 番目「状態の違いが、色だけに乗る」と同じ崩れ方です。

5. 状態設計(States)

5.1 必須状態(Required)

  • データあり:通常表示。棒、軸、ラベルがそろっている
  • データなし:項目が 0 件。空の座標軸ではなく、理由と次の操作を出す
  • 読み込み中:高さの決まった枠を確保し、描画後にレイアウトが動かないようにする

5.2 条件付き状態(Conditional)

  • 一部欠損:ある項目だけ値が取れていない。0 として棒を描かず、「データなし」と分かる見せ方にする
  • ホバー / フォーカス:その棒の正確な値をツールチップで出す
  • 選択中:ドリルダウンの起点として、選んだ棒を強調する
  • エラー:取得に失敗した。古い数字を残したまま新しい数字のように見せない
状態必須何を伝えるか
データあり必須各項目の量と、その差
データなし必須表示するデータが無い理由と、次にできること
読み込み中必須取得中であること。高さは確保済み
一部欠損条件付きこの項目だけ値が無い(0 ではない)
ホバー / フォーカス条件付きこの棒の正確な値
選択中条件付きいまドリルダウンの対象になっている項目
エラー条件付き取得に失敗した。表示中の数字は信用できない

6. バリエーション設計(Variants)

向き、値表示、補助線の 3 つの組み合わせで決まります。

バリアントGUNJO の指定典型的な用途
縦棒variant="vertical"(既定)時点の比較。項目名が短い
横棒variant="horizontal"ランキング。項目名が長い
値表示ありshowValues正確な数字も読ませたい。印刷や共有される図
補助線なしshowGrid={false}カード内の小さな図。周辺ので桁が分かる
ラベルなしshowLabels={false}見出しや凡例で項目が分かっている場合のみ
平均線つきaverageValue + averageLabel平均との距離が主題のとき
しきい値つきthreshold + thresholdLabel上限や目標の超過を名指しするとき

禁止パターンshowLabels={false}showValues={false} を同時に指定して、値も項目名も無い棒だけを置くこと。輪郭しか残らず、読者は何を見ているのか分かりません。飾りとして図が要るだけなら、Sparkline Chart(スパークライン)を使います。


7. パターン集(Good / Bad / How to fix)

7.0 よく崩れる設計パターン(3つ)

  • 縦軸を途中から始めて差を誇張する:数字は正しいのに、読者が受け取る結論が変わります。悪意が無くても、既定の自動スケールに任せると起こります
  • しきい値の超過を色だけで示す:色を区別しにくい読者と、読み上げを使う読者の両方に届きません
  • 並び順に理由が無い:データベースが返した順のまま出すと、読者は毎回すべての棒を読み直すことになります

7.1 Bad(典型3つ)

  • 縦軸の下限を自動計算に任せた結果、55 から始まる棒グラフになり、2 割の差が 3 倍に見えている
  • 上限を超えた棒だけを赤くしており、値も上限のラベルも出していない
  • 12 店舗の売上を、店舗コードの昇順で並べている。読者が知りたいのは「どこが伸びているか」なのに、順位が読めない

7.2 Good(対になる3つ)

  • 縦軸をゼロから始める。差が小さくて読めないなら、前月比や目標との差を別の棒グラフとして出す
  • 上限線に「上限 66」とラベルを付け、超過した棒には斜線を掛け、値の横に「(超過)」と書く
  • 値の大きい順に並べ、上位 8 件を出して残りを「その他」にまとめる

7.3 How to fix(手順)

  1. 縦軸の下限を確認する。ゼロでなければ、ゼロに変えるか、比較する指標そのものを差分に変える
  2. 並び順の根拠を 1 行で言えるか確かめる。言えないなら、値の大きい順か時間の順にそろえる
  3. 色で意味を出している箇所を数える。それぞれに、色以外の手がかり(文字、模様、位置)を 1 つ足す
  4. <svg>role="img"aria-label を付け、同じ数字を読める表を近くに置くか、開閉できる要素として添える
  5. 項目名が入りきっていないなら variant="horizontal" に変える

8. ルール(Must / Better)

Must(守らないと壊れる)

Better(品質が跳ねる)


9. アクセシビリティ要件(必須)

チャートは「色だけで系列を区別する」が起きやすいコンポーネントです。次の 3 点を満たします。

9.1 色だけに頼らない

同じ図の中で意味の違いを示すとき、色に加えて手がかりをもう 1 つ載せます。

  • 模様:超過した棒に斜線、予測値の棒に薄い塗り
  • ラベル:棒の上か横に値を出す。超過には「(超過)」のような文字を添える
  • 位置:しきい値の線と、その線に付けたラベル

色と背景の比は 3:1 以上を確保します。隣り合う棒どうしの色も、明度で見分けられるところまで離します。

9.2 代替テキストか表での提示

図そのものを読み上げられる状態にするか、同じ数字を表で提示します。どちらか一方があれば要件を満たします。

<figure>
  <svg role="img" aria-labelledby="bar-title bar-desc">
    <title id="bar-title">店舗別の来店数(2026年8月)</title>
    <desc id="bar-desc">
      渋谷62、新宿71、池袋59、上野64、品川68。上限は66で、新宿と品川が超過。
    </desc>
    <!-- 棒の描画。装飾用の要素には aria-hidden="true" -->
  </svg>
  <figcaption>
    <details>
      <summary>数値を表で見る</summary>
      <table>
        <caption>店舗別の来店数(2026年8月・単位は人)</caption>
        <thead><tr><th scope="col">店舗</th><th scope="col">来店数</th><th scope="col">上限との差</th></tr></thead>
        <tbody>
          <tr><th scope="row">渋谷</th><td>62</td><td>-4</td></tr>
          <tr><th scope="row">新宿</th><td>71</td><td>+5(超過)</td></tr>
        </tbody>
      </table>
    </details>
  </figcaption>
</figure>

aria-label に数字を全部並べると読み上げが長くなります。項目が 6 つを超えるなら、aria-label には要約(最大と最小、傾向)を書き、正確な数字は表に置きます。

9.3 キーボードで棒をたどれる

棒がクリックできる(ドリルダウンする)なら、キーボードでも同じことができる状態にします。

  • Tab でチャートに入り、ArrowLeftArrowRight で棒を移動する
  • フォーカス中の棒には、色以外にも見える枠(フォーカスリング)を出す
  • EnterSpace で、クリックと同じ操作が起きる
  • 棒がクリックできないなら、フォーカス可能にしません。止まるだけの要素を増やさないためです

ツールチップはホバーだけでなくフォーカスでも出します。マウスを使わない読者にも正確な値が届きます。

9.4 Touch / Pointer

棒がタップできるなら、は 44 ピクセル四方以上を確保します。棒が細いときは、棒そのものではなく、その列全体を透明な矩形で覆って当たり判定にします。


10. 実装メモ(Implementation Notes)

  • GUNJO の BarChartdata{ label, value, color } の配列)を受け取り、max を指定しなければデータの最大値で正規化します。max を明示すると、複数のチャートでスケールをそろえられます
  • formatValue は関数を渡す prop のため、クライアントコンポーネントからのみ渡せます。サーバーコンポーネントから桁区切りを指定したいときは、シリアライズできる valueFormat を使います
  • threshold を指定すると上限線が引かれ、超えた棒が thresholdTone(既定は destructive)で塗られます。色が変わるだけなので、showValuesthresholdLabel を組み合わせて、文字でも超過が読めるようにします
  • 棒の本数が可変のときは、コンテナの高さを先に決めておきます。描画のたびに高さが変わると、その下のコンテンツが飛びます
  • 実装は GUNJO の BarChartgunjo.jp を新しいタブで開く にあります。props の一覧と、縦棒、横棒、しきい値の見本が置かれています

11. 関連リンク


12. まとめ

棒グラフの設計でいちばん効くのは、縦軸をゼロから始めることと、並び順に理由を持たせることです。迷ったら 4. 設計判断の核 に戻り、「基線はゼロか」「並び順を 1 行で説明できるか」「色以外の手がかりがあるか」の 3 点を確かめてください。

しきい値を扱うチャートでは、超過を色だけで示す崩れ方が繰り返し出ます。色、模様、文字の 3 つがそろっていれば、色を区別しにくい読者にも、読み上げを使う読者にも、同じ結論が届きます。項目名が長くて縦棒に収まらないと感じたときは、文字を斜めにする前に横棒を試してください。

更新のお知らせ

サイトに載せていない実例や、新しい記事のお知らせはこちらで出しています。

読んだ内容を、自分の画面に当てるとき

UIXHEROは、記事を書くほかに、画面の検品・判定、デザインシステムの構築、実装と改善の伴走を受けています。何を頼めばいいか決まっていない段階の相談も、同じ窓口で受けます。

UIXHEROに頼めることを見る

※ 記事の内容についての質問や、書いてほしいテーマの要望も同じ窓口で受けています

記事をシェア

メールでお知らせを受け取る

最終更新: 2026年8月27日

この記事を書いた人

Dengen Yosho(DGYS)

Dengen Yosho(DGYS)

UI/UXデザイナー兼デザインエンジニア デザイン歴25年以上 情報設計〜UIデザイン〜React/TypeScriptによる実装までを一気通貫で担当 大手企業のDXプロジェクトや決済アプリ領域で、デザインリードとして改善と構築を経験 現在はフリーランスとして、プロダクトのUI/UX改善とデザインシステム構築を支援 長年の実務の中で感じてきたのは、 「良いUI」はセンスではなく、再現可能な判断の積み重ねであるということ UIXHEROは、 心理学や行動科学の知見を、現場で使える設計言語に翻訳するための場所 関心領域は「ユーザーの行動が変わるUI」 人の認知・注意・意思決定の構造を理解し、 “なぜそのUIが機能するのか”を言語化することを目指している

あわせて読みたい

この記事に関連する記事をご紹介します

Donut Chart(ドーナツチャート)

中央をくり抜いた円で構成比を示すチャート。中央に置く値の選び方、円グラフとの使い分け、リングの太さ、凡例の作りという設計判断と、色だけに頼らないアクセシビリティ要件を解説する。

2026年8月27日
17

Gauge Chart(ゲージチャート)

1つの値を範囲の中に置いて示す半円のチャート。範囲の両端に意味があるかという条件、しきい値の帯の設計、色だけで良否を伝えない書き方という設計判断とアクセシビリティ要件を解説する。

2026年8月27日
16

Heatmap Chart(ヒートマップ)

行と列の交点をセルの濃淡で示すチャート。濃淡で読めるものと読めないもの、色の段階の切り方、行列の並び順、値を数字でも出す判断とアクセシビリティ要件を解説する。

2026年8月27日
17

もっと深く知りたいですか?

ここに掲載されていないトピックについても、リクエストがあれば解説記事を追加します。 わかりにくい点や、具体的な事例について知りたいことがあれば教えてください。

リクエストを送る