「複合グラフ・2軸グラフ」を取り巻く中核キーワード群です。 検索やインデックス作成で参照する際の手がかりにしてください。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になります。
🍰 まずはやさしく
2種類のグラフを重ねた図です。
単位が違うデータを比べるために使います。
売上と成長率を一緒に見たい時に便利です。
このグラフの特徴と注意点を学びます。
最も忙しい読者のために、 まず結論だけまとめます。 詳細は以下のセクションへ:
twinx()、 Excel の「2 軸グラフ」、 plotly の secondary_y。🍰 まずはやさしく
お店の分析などでよく使われる図です。
2つのデータの関係をひと目で伝えるためです。
客数と客単価を同時にグラフにします。
この図がどこで使われ、何に注意するか読みます。
「店舗別 売上(棒)と 客単価(折れ線)を同じグラフで」 — マーケ資料で頻出。 ただし副軸のスケールを変えると「客単価が伸びている!」と 意図的に印象操作 もできるので、 読み手も作り手も注意が必要。
このページの読み方:まず 30秒結論 と 直感 を読み、 必要に応じて 数式 や 計算例、 落とし穴 に進んでください。
🍰 まずはやさしく
左右に2つの目盛りがあるグラフです。
量と比率のような違う情報を並べるためです。
人口の数と出生率を重ねて考えます。
正しい作り方と、やってはいけない書き方を学びます。
1 つのグラフに 2 つの目盛り(左右)を入れることで、 絶対値と比率 のような異質な情報を並べられます。
「売上は伸びている」「でも成長率は鈍化」のような 2 つのストーリーを 1 枚で 語れる。 反面、 左右の軸の取り方で印象が大きく変わるため、 倫理的配慮が必要。
複合グラフ・2軸グラフ は「異なる単位の指標」を 1 枚に重ねる可視化。 ここでは「2軸グラフの正しい構造」「棒+折れ線の重ね方」「やってはいけない 2 軸スケール詐術」を視覚化する。
複合グラフの核を本当に掴めたかを 6 問で確認する。 すべて 1 分以内で答えられる粒度。 「自分で」答えを口に出して言える状態を目指したい。
これらの問題に詰まった項目があれば、 「複合グラフの 3 パターン」「2 軸の詐術」セクションへ戻ろう。 複合グラフは強力だが、 軸操作で印象を捏造できる「諸刃の剣」でもある。 必ず「正直なスケール」を心がけたい。
🍰 まずはやさしく
2つのデータを同じ場所に描く仕組みです。
それぞれの目盛りを調整して高さを決めるためです。
スマホの画面に合うよう数値を変換します。
目盛りの範囲を変えると見え方が変わる理由を読みます。
複合グラフ・2軸グラフに固有の「数式」は、 2 つの系列を同じ描画領域に写像するためのスケール変換である。 左軸の系列と右軸の系列は、 それぞれ独立な線形変換で描画位置 (高さ) に変換される。
$$h(v) = \frac{v - v_{\min}}{v_{\max} - v_{\min}} \times H$$
ここで $v$ は系列の値、 $[v_{\min},\ v_{\max}]$ はその軸の表示範囲、 $H$ は描画領域の高さ。 左軸と右軸で $[v_{\min},\ v_{\max}]$ を別々に選べる — これが 2 軸グラフの表現力の源泉であり、 同時に「範囲の恣意的な選択で 2 系列の見かけの関係を操作できる」という最大の弱点でもある。 具体的な値での計算例は実値で計算してみるを参照。
2 軸グラフは「左軸 = 量 (絶対値)」「右軸 = 率 (比率・割合)」の役割分担が定石。 SSDSE-B-2026 なら、 左軸に A1101 (総人口) の棒、 右軸に A4103 (合計特殊出生率) の折れ線を対応させる。 読むときは次の 3 点を必ず確認する:
| パターン | 構成 | 向いている用途 | SSDSE-B-2026 での例 |
|---|---|---|---|
| 棒 + 折れ線 (2 軸) | 左軸に量、 右軸に率 | 単位の異なる 2 系列の同時表示 | 総人口 (A1101) × 合計特殊出生率 (A4103) |
| 積み上げ棒 | 1 本の棒を内訳で分割 | 合計と内訳の同時表示 | 年齢 3 区分人口の構成 |
| 折れ線 + 面 | 累積を面、 推移を線 | 時系列の累積比較 | 年度別人口の推移と累積差 |
| Small Multiples | 同型の小グラフを並置 | 2 軸の代替。 誤読リスクが低い | 人口と出生率を上下 2 パネルに分割 |
※ 積み上げ棒の詳細は積み上げ棒グラフ、 誤読リスクの体系は誤解を招くグラフを参照。
2 軸グラフを見たら、必ず次の 3 手順を踏んでください。 本章の家計データの例では、この手順で「見た目は無関係、実は −0.668」という発見にたどり着きました。
| 手順 | やること | 家計データでの結果 |
|---|---|---|
| 1 | 水準の相関を計算する | −0.121。ここで止めると「関係なし」と誤判断する |
| 2 | 前年差の相関を計算する | −0.668。エンゲルの法則が現れる |
| 3 | 別の切り口(断面)でも確かめる | 2023 年 47 県で −0.562。時間・地域の両方で成立 |
3 手順すべてで符号が一致したときだけ、「関係がある」と書いてよい—— これくらい慎重でちょうどよいと考えてください。 2 軸グラフはこの 3 手順の入口にすぎず、それ自体は何も証明しません。
都道府県の人口(棒・左軸)と TFR(折れ線・右軸)を 2 軸グラフで表示する設計:
右軸 (合計特殊出生率 A4103) に値 1.21 (SSDSE-B-2026 の 2023 年度における福島県・奈良県の実測値) を描くとき、 表示範囲の取り方で描画位置がどれだけ変わるかを、 スケール変換 $h(v) = (v - v_{\min}) / (v_{\max} - v_{\min})$ で計算する。 なお 0.99 は 2023 年度の全国最小値 (東京都)、 最大値は 1.60 (沖縄県)。
def h(v, vmin, vmax):
"""軸範囲 [vmin, vmax] に対する値 v の相対的な描画位置 (0〜1)"""
return (v - vmin) / (vmax - vmin)
v = 1.21 # 例: 合計特殊出生率 (A4103)。2023 年度の福島県・奈良県の実測値
print(f"自然な範囲 0.8〜2.0 : {h(v, 0.8, 2.0):.2f}")
print(f"狭めた範囲 0.99〜1.21: {h(v, 0.99, 1.21):.2f}")💬 手計算 (Step 1・Step 2) と Python 出力が一致。 同じ 1.21 という値が、 右軸の範囲次第で「下から 1/3」にも「最上端」にもなる — これが 2 軸グラフ最大の落とし穴 (スケール操作) の正体である。
2 軸グラフの典型例をもう 1 つ、SSDSE-B-2026 の家計データで作ります。 棒に消費支出(二人以上の世帯、月額・円)、線にエンゲル係数(食料費 ÷ 消費支出 × 100、%)。 円と % なので単位が違い、桁も 29 万 vs 27 と 4 桁違うので、まさに 2 軸の出番に見えます。 値はいずれも 47 都道府県の平均です。
| 年度 | 消費支出(円/月) | 食料費(円/月) | エンゲル係数(%) |
|---|---|---|---|
| 2012 | 286,665 | 66,705 | 23.3 |
| 2014 | 290,114 | 69,073 | 23.8 |
| 2016 | 287,056 | 72,227 | 25.2 |
| 2018 | 288,163 | 73,443 | 25.5 |
| 2020 | 279,688 | 75,585 | 27.0 |
| 2022 | 289,630 | 76,598 | 26.4 |
| 2023 | 295,856 | 80,598 | 27.2 |
2 軸グラフにすると、棒はほぼ横ばい(28.7 万〜29.6 万)なのに、線だけが 23.3 → 27.2 と右上がりになります。 ここから読み手が受け取る物語は「支出は変わらないのに食費の比率が上がった=生活が苦しくなった」でしょう。 実際、食料費は 66,705 → 80,598 円と +20.8% 増えており、 同じ期間に消費支出全体は +3.2% しか増えていません。 この読み取り自体は正しいのですが、それは 2 軸グラフのおかげではなく、 食料費という 3 本目の系列を別途確認したからです。
消費支出とエンゲル係数の相関を 2 通りで計算すると、興味深い結果になります。
| 計算のしかた | 相関係数 | 意味 |
|---|---|---|
| 水準(12 年の値そのもの) | −0.121 | ほとんど無相関。図では線が右上がり、棒が横ばいなので当然 |
| 前年差(変化量どうし) | −0.668 | 支出が増えた年はエンゲル係数が下がる、という明確な関係 |
| 2023 年・47 都道府県の断面 | −0.562 | 支出の多い県ほどエンゲル係数が低い(地域差としても成立) |
💬 ここが重要です。 水準では見えなかった関係が、差分では −0.668 とはっきり現れました。 エンゲルの法則(所得が増えると食費の比率は下がる)が、年ごとの変動として実際に確認できたわけです。 2 軸グラフを眺めているだけでは、この関係には絶対にたどり着けません。 棒が横ばいで線が右上がりなら、多くの人は「関係なし」か「逆相関」と判断してしまうからです。
しかも 2023 年の 47 都道府県断面でも −0.562。 エンゲル係数は愛媛県 31.82% が最高、岐阜県 23.89% が最低で、 8 ポイント近い地域差があります。 時間方向でも地域方向でも同じ符号の関係が確認できる—— これで初めて「支出とエンゲル係数には実質的な関係がある」と言えます。 2 軸グラフはこの結論を示す図ではなく、結論を探すきっかけにすぎません。
なお前ページの複合グラフの例(出生数と婚姻件数)では逆に、 水準で +0.972 と強かった相関が差分で −0.169 に消えました。 水準と差分のどちらが強いかは、データによって逆転します。 「差分をとれば真実が出る」わけでもなく、 両方を計算して食い違いを検討するプロセスそのものが必要だ、というのが教訓です。
2 軸グラフの怖さは「同じデータでも右軸の目盛りの取り方だけで、 2 系列が連動して見えたり無関係に見えたりする」こと。 下のグラフは SSDSE-B-2026 の 2023 年度・実測値で、 左軸に総人口 (A1101) の棒、 右軸に合計特殊出生率 (A4103) の折れ線を重ねた複合グラフ。 右軸の最小値・最大値スライダーを動かして、 折れ線の「見かけの激しさ」がどう変わるか体感しよう。 データは一切変わっていないのに、 印象だけが激変する。
💡 グラフ上を上下にドラッグ(スマホはスワイプ)しても右軸の最大値を絞れます。 「同一スケールに揃える」で両系列を 0〜1 に正規化し、 本当の関係を確認。
| 正当な使いどころ | 誤用 (相関の演出) | |
|---|---|---|
| 目的 | 単位が根本的に異なる 2 系列を 1 枚で見せる (人口[人] と 出生率[無次元]) | 2 系列が連動していると印象づける |
| 軸範囲 | 各軸を 0 起点または自然な範囲にし、 根拠を caption に明記 | 右軸を恣意的に狭めて折れ線の変動を誇張 |
| 主張 | 「2 つの指標の推移をそれぞれ示す」にとどめる | 「両者は連動 → 因果がある」と飛躍する |
| 代替 | 比率化・指数化して同一軸へ、 スモールマルチプルで並置 | — |
単位が同じ (どちらも「率」など) なら、 わざわざ 2 軸にせず同一軸で並べるのが誠実。 2 軸が本当に必要なのは「万人」と「無次元の率」のように単位が違って同じ軸に載せられないときだけ。 迷ったら基準化 (最初の年=100 の指数など) して 1 軸にまとめるか、 折れ線グラフを上下 2 段に分けるスモールマルチプルを検討しよう。 相関を主張したいなら 2 軸グラフではなく誤解を招くグラフで扱う散布図・回帰が本筋。
最小再現コード。 SSDSE-B のような実データを前提に、 4〜8 行で動く例です:
1 2 3 4 5 6 7 8 9 | import pandas as pd, matplotlib.pyplot as plt df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) d = df[df['SSDSE-B-2026'] == 2023].sort_values('A1101', ascending=False).head(10) fig, ax1 = plt.subplots(figsize=(10,5)) ax1.bar(d['Prefecture'], d['A1101'] / 1e4, color='lightgray', label='総人口') ax2 = ax1.twinx() ax2.plot(d['Prefecture'], d['A4103'], 'r-o', label='合計特殊出生率') ax1.set_ylabel('総人口 (万人)'); ax2.set_ylabel('合計特殊出生率') plt.savefig('complex_graph.png') |
補足:ライブラリのバージョンや前処理状態によって出力は変わります。 自分の環境で動かすときは pip list でバージョンを確認し、 入力 CSV のパス・列名を実態に合わせてください。
🎯 このコードでやること:2023 年度の人口上位 10 都道府県について、 左軸に総人口の棒、 右軸に合計特殊出生率の折れ線を重ねた 2 軸グラフを描く。 両軸とも 0 起点にして錯覚を防ぐ。
📥 入力データ:SSDSE-B-2026 (2012〜2023 年度 × 47 都道府県 = 564 行)。 使用列は SSDSE-B-2026 (先頭列 = 年度)・Prefecture・A1101 (総人口)・A4103 (合計特殊出生率)。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d = df[df['SSDSE-B-2026'] == 2023].sort_values('A1101', ascending=False).head(10)
fig, ax1 = plt.subplots(figsize=(10, 5))
ax1.bar(d['Prefecture'], d['A1101'] / 1e4, color='#B0BEC5', label='総人口 (万人)')
ax1.set_ylabel('総人口 (万人)')
ax1.set_ylim(0, None) # 棒はゼロ起点が原則
ax2 = ax1.twinx()
ax2.plot(d['Prefecture'], d['A4103'], color='#D32F2F', marker='o',
label='合計特殊出生率')
ax2.set_ylabel('合計特殊出生率')
ax2.set_ylim(0, 2.0) # 右軸も 0 起点で誇張を防ぐ
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2, loc='upper right')
plt.title('人口上位 10 都道府県: 総人口と合計特殊出生率 (2023 年度)')
plt.tight_layout()
plt.savefig('complex_graph.png', dpi=100)📤 実行結果:
💬 結果の読み方:人口の多い大都市圏ほど出生率が低めに見える傾向が読み取れる (2023 年度・47 都道府県全体で総人口と合計特殊出生率の相関係数は r ≒ −0.56、 最小は東京都 0.99・最大は沖縄県 1.60)。 ただしこれは「相関」であって「因果」ではない点に注意 (よくある落とし穴参照)。 右軸を 0〜2.0 に固定したので折れ線の変動は控えめに見える — これが「正直なスケール」。 右軸を狭い範囲に切ると、 同じデータでも劇的な変動に見えてしまう。
| 環境 | 書き方 | 注意点 |
|---|---|---|
| Matplotlib | ax2 = ax1.twinx() | 凡例は両軸分を手動で結合する |
| Plotly | make_subplots(specs=[[{"secondary_y": True}]]) | secondary_y=True でトレースを右軸へ |
| Excel | 系列を右クリック →「第 2 軸」 | 既定の軸範囲が恣意的になりがち。 必ず手動確認 |
| pandas | df.plot(secondary_y='列名') | 簡便だが軸ラベル・凡例の調整は別途必要 |
このコードでやること:消費支出とエンゲル係数について、 年ごとの変化量(前年差)を並べ、水準の相関と差分の相関を比べます。 2 軸グラフを見て「関係がなさそう」と判断する前に必ずやるべき確認です。
📥 入力データ(SSDSE-B-2026、47 都道府県 × 12 年の家計項目):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2 軸グラフでは見えない関係を、差分で確かめる import pandas as pd df = pd.read_csv("data/raw/SSDSE-B-2026.csv", encoding="cp932", header=1) df = df[df["地域コード"].astype(str).str.match(r"^R\d{5}$", na=False)].copy() C, F = "消費支出(二人以上の世帯)", "食料費(二人以上の世帯)" for c in [C, F]: df[c] = pd.to_numeric(df[c], errors="coerce") df["年度"] = pd.to_numeric(df["年度"], errors="coerce") nat = df.groupby("年度")[[C, F]].mean() # 47 都道府県の平均 nat["エンゲル係数"] = nat[F] / nat[C] * 100 diff = nat.diff().dropna() # 前年差をとる print("年ごとの変化(2 軸グラフでは読み取れない部分)") for y, r in diff.iterrows(): print(f" {int(y)}: Δ消費支出 {r[C]:+8.0f} 円 Δエンゲル係数 {r['エンゲル係数']:+6.2f} pt") print() print(f"水準の相関 : {nat[C].corr(nat['エンゲル係数']):+.3f}") print(f"差分の相関 : {diff[C].corr(diff['エンゲル係数']):+.3f} ← こちらが本当の関係") |
📤 実行結果:
💬 読み方:表を上から追うと、符号の対応がはっきり見えます。 消費支出が大きく減った 2015 年(−3,961 円)と 2020 年(−8,837 円)は、 エンゲル係数が大きく上がっています(+1.05 pt、+1.48 pt)。 逆に支出が大きく増えた 2021・2022 年は、エンゲル係数が下がりました(−0.35、−0.22 pt)。 これがエンゲルの法則そのものです。
2 軸グラフでは、棒(消費支出)の 8,837 円の凹みは 29 万円のスケールでは 3% 程度の変化にすぎず、 ほとんど目に見えません。線のほうも右上がりのトレンドに埋もれます。 図では見えない関係が、差分をとった瞬間に −0.668 として現れる—— これが「2 軸グラフは仮説を立てる道具であって、検証する道具ではない」ということの実例です。
ちなみに 2023 年だけは、支出が +6,226 円と増えたのにエンゲル係数も +0.80 pt 上がっており、 法則から外れています。食料費が 76,598 → 80,598 円と 5.2% 上がった影響で、 支出の増加分以上に食費が伸びたためです。 相関 −0.668 は「全体の傾向」であって、すべての年に当てはまるわけではありません。 外れた年を見つけて理由を考えるところに、本当の分析があります。
複合グラフ・2軸グラフ を実務で扱うとき、 多くの分析者が同じところでつまずきます。 代表的な失敗パターンを先回りで押さえておくと、 後工程のトラブルを大幅に減らせます。
※ 上記 5 件は SSDSE-B-2026 (12 年度 × 47 都道府県 = 564 行、 112 列) で 2 軸グラフを描く際に実際に起こる事故パターン。 「総人口 (A1101) × 合計特殊出生率 (A4103)」「延べ宿泊者数 (G7101) × 消費支出 (L3221)」など単位の異なる 2 量を重ねるたびに、 この 5 点をチェックする。
作り手だけでなく読み手も知っておくべき誤解パターン。 本編の 5 件と合わせてチェックリストとして活用してください。
「複合グラフ・2軸グラフ」を中心に、 Small Multiple・Sparklines・Bubble Chart・Parallel Coordinates・Radar Chart・落とし穴 (二重 Y 軸の誤解) を 6 方向で配置した俯瞰図。 単一グラフでは表せない多変量関係を複合 vs 代替案で比較する地図。
上の概念マップは「複合グラフ・2 軸グラフ」を中心に、 Small Multiple (小分割反復)・Sparklines (極小グラフ)・Bubble Chart (大きさで第 3 変数)・Parallel Coordinates (多変量平行軸)・Radar Chart (極座標多軸)・落とし穴 (2 軸の縦軸スケール乱用) を 6 方向に展開した俯瞰図である。 単一グラフでは表現しきれない多変量関係を表す代替案として、 「複合グラフ以外の選択肢」を常に思い出すための地図でもある。
「複合グラフ」は異なる尺度の系列を 1 枚に重ねる図で、 上流の単位・スケール整理と下流の二重 Y 軸の誤解リスク評価を組まないと「相関があるように見える」錯覚を生む。
上流で系列の単位・尺度を確認し、 並列の小倍数 (Small Multiples) を代替案として検討し、 下流で読者の誤解 (相関を演出してしまう) を回避する設計を入れれば、 SSDSE 経時データの複数指標比較を歪みなく伝えられる。
「複合グラフ・2軸グラフ」を実際の課題に当てはめるとき、 状況別に何を選ぶかを 3 段階で判定する。
上記は 複合グラフ を 「A1101 (総人口) と A4103 (合計特殊出生率) を 2 軸グラフで描画」する課題に適用するときの典型フロー。 都道府県データ特有の小標本(n=47)・地域固有のサンプリング誤差を考慮し、 必要に応じて分析設計を調整する。
第2軸は「1枚の紙に、住所の違う2つの世界を貼り合わせる」発明だと考えると腑に落ちます。 左軸の住所は「万人」、 右軸の住所は「無次元の率」。 両者はそもそも別の物差しなので、 同じ高さに並んでいても「高さの比較」には意味がありません。 「棒より折れ線が上にある=出生率が人口より大きい」といった読み方は無意味です。
では第2軸は何を与えるのか。 それは「横軸(都道府県や年)を共有させ、 2系列の動き方だけを見比べる」機会です。 SSDSE-B-2026 なら、 都道府県という同じ横軸の上で「総人口 (A1101・万人)」と「合計特殊出生率 (A4103・無次元)」の増減パターンを並べて眺める — これが正当な使い方です。 見るのは「高さ」ではなく「向きと変化」だけ、 と割り切るのが第2軸を正しく読むコツです。
だから第2軸を使う条件はただ1つ、 「横軸(観測対象)は共有できるが、 縦軸の単位が根本的に違う」ときだけです。 逆に、 2系列がどちらも「率」や「円」など同じ単位なら第2軸は不要で、 同一軸に並べるほうが誠実です(高さを直接比較できるため)。 「2つのストーリーを1枚で」という利点の裏返しとして、 第2軸は「2つの物差しを分けて描く」という契約でもあります。 読者にその契約(左はこれ、 右はこれ)を明示する義務が作り手に生じる — 図Aのように軸の色を系列の色に一致させるのは、 その契約書に判子を押す行為なのです。
本編の落とし穴を、 「どの操作が」「どんな錯覚を」生むかで分解します。 いずれもデータを1文字も変えずに、 印象だけを操作する手口です。 このページ上部の 🎮 触って理解する と 実値で計算してみる で、 1番目の手口は実際に体感できます。
| 手口 | 具体的な操作 | 生まれる錯覚 | 見破り方 |
|---|---|---|---|
| 右軸レンジ圧縮 | 右軸を実変動幅ぎりぎり (例 0.99〜1.29) まで狭める | 微差が画面全体に拡大 → 「激しい連動」に見える | 右軸範囲と実変動幅の比を確認 (ウィジェットの詐術プリセット) |
| 軸起点操作 (ゼロ切り) | 棒・折れ線の下端を0でなく途中から始める | 小さな差が「倍以上」に誇張される | 軸が0から始まっているか目視 |
| 左右ゼロ位置ずらし | 左軸の0と右軸の0を別の高さに置く | 棒と折れ線の「交差点」に意味があるように誤読 | 交差の位置に意味を読み取らない |
| 軸反転 | 片方の軸だけ上下を反転させる | 無相関を「逆相関」に、 正の関係を「負」に偽装 | 両軸の向き (上が大か小か) を確認 |
| 折れ線化詐術 | 47都道府県のような離散カテゴリを線でつなぐ | 存在しない「中間値」や「トレンド」を暗示 | カテゴリは点のみ・線で結ばない |
2軸は強力ですが、 次のいずれかに当てはまるなら使わないほうが誠実です。
※ 相関の演出という「軸そのものによる欺瞞」の体系は誤解を招くグラフ、 読者の知覚を利用した誤読 (近接・共通運命) はゲシュタルトの法則を参照。
2軸グラフの目的(「単位の違う2系列の動きを見比べる」)は、 多くの場合もっと誤読の少ない方法で達成できます。 代表的な3つの代替表現を押さえておきましょう。
「万人」と「無次元の率」という別単位の2系列も、 2012年=100の指数に直せば同じ軸に正直に並べられます。 東京都の実測値で確かめます。
2軸グラフなら「人口の棒」と「出生率の折れ線」を別々の物差しで眺めるしかありませんでしたが、 指数化すれば同一軸で「人口は微増・出生率は明確に減少」を高さごと直接比較できます。 これが「単位が違うから2軸」ではなく「単位を揃えてから1軸」という発想の転換です。
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
tk = df[df['Prefecture'] == '東京都'].sort_values('SSDSE-B-2026')
base = tk[tk['SSDSE-B-2026'] == 2012].iloc[0] # 基準年 2012
tk = tk.assign(
pop_idx=tk['A1101'] / base['A1101'] * 100, # 総人口の指数
tfr_idx=tk['A4103'] / base['A4103'] * 100, # 合計特殊出生率の指数
)
print(tk[['SSDSE-B-2026', 'pop_idx', 'tfr_idx']].tail(1).round(1))
# → 2023: pop_idx 106.4 / tfr_idx 90.8 (同じ「2012=100」軸に載る)| やりたいこと | 第一候補 | 参照ページ |
|---|---|---|
| 単位の違う2量の推移を1枚で | 2軸 (範囲根拠を明記) or 指数化して1軸 | — |
| 内訳と合計を同時に | 積み上げ棒 | 積み上げ棒グラフ |
| 2量の関係・相関を主張 | 散布図+回帰 | 散布図・相関 |
| 3系列以上・カテゴリ多数 | 小倍数図 (small multiples) | 折れ線グラフを分割 |
| 単一種類で十分 | 棒 or 折れ線 単体 | 棒グラフ・折れ線グラフ |
| 色・凡例の設計 | 淡色背景+濃色前景、 色覚配慮 | カラースケール・ゲシュタルトの法則 |
本ページと合わせて読むと理解が立体的になる、 用語集内の実在ページです:積み上げ棒グラフ/棒グラフ/折れ線グラフ/散布図/相関/誤解を招くグラフ/ゲシュタルトの法則/カラースケール/標準化/尺度水準/合計特殊出生率/高齢化率/時系列/グループ教材:データ可視化。
※ 「小倍数図 (small multiples)」「指数 (index number)」の独立ページは用語集に未収録のため、 本ページ内の解説を参照してください(リンクなし)。
※ 上記 5 件は 2 軸グラフを matplotlib (twinx) や Plotly (secondary_y) で実装するときに発生する典型事例。 SSDSE-B-2026 で「左軸=総人口 (A1101)、 右軸=合計特殊出生率 (A4103)」「左軸=消費支出 (L3221)、 右軸=高齢化率 (A1303/A1101)」のように単位の異なる 2 量を重ねるたびにチェックしてほしい。
複合グラフ・2軸グラフ は「可視化」分野の中で発展してきた概念・手法です。 学術的には継続的な研究で精緻化され、 実務的にはツール・ライブラリの普及で誰でも使えるようになってきました。 用語の使い方・意味は時代と分野で少しずつ変わるため、 文脈に応じた解釈が大切です。 入門書だけでなく、 標準的な教科書(例:データサイエンス・統計学の定本)や信頼できるオンライン教材も併用すると、 ぶれない理解に近づけます。