論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
折れ線グラフ
Line Chart
可視化

🔖 キーワード索引

本ページの主要キーワードを一覧表示します。 各語へのアンカー/関連ページに飛べます。

折れ線グラフLine Chart時系列可視化matplotlibpandas plot横軸=時間縦軸=量系列マーカー凡例ティック対数軸比較トレンド欠損補完異常検知の補助線

🔖 折れ線グラフ関連の追加キーワード

線形補間 時系列 matplotlib multi-line area chart スパゲッティチャート 軸スケール 対数軸 stackplot small multiples ベスト・プラクティス 実値で計算 隣接手法

💡 30秒で分かる結論

🍰 まずはやさしく

データの変化を線で結んだグラフです。

時間の流れによる変化を伝えるために使います。

テストの点数の上がり下がりなどを表せます。

この章では折れ線グラフの重要ポイントを読みます。

時系列の推移を線で表現

line chart を 30 秒で把握する重要ポイント:

📍 文脈ボックス — あなたが今見ているもの

🍰 まずはやさしく

点と線を組み合わせた基本の図です。

データの傾向やトレンドを読み取るために使います。

都道府県ごとの人口の変化などを表せます。

ここではグラフを上手に作るためのルールを読みます。

「折れ線グラフ」可視化 のカテゴリに属する用語です。 時間など順序を持つ変数の変化を、 点を線で結んで表現する基本可視化です。 経時変化・トレンド・系列間比較を 1 枚で表せる柔軟性を持つ反面、 軸の取り方で印象が大きく変わる点で注意が必要です。

📍 折れ線グラフのベスト・プラクティス 10 か条

  1. ゼロ基線の原則: 縦軸はゼロから始める。 ただし「変化を強調」が目的なら明示すること。
  2. 軸ラベルとタイトル: 「人口 (万人)」のように単位を明示。
  3. マーカーを使う: 実測値を点で示し、 補間は線で表現。 これで「実データと補間」の区別が付く。
  4. 系列数は 5 以下: それ以上は色分けや凡例が機能しない。 ハイライトや小複表示に。
  5. 凡例の位置: グラフ右上が標準、 系列が多ければ右側に分離。
  6. グリッド線: alpha=0.3-0.5 で薄く、 データを邪魔しない。
  7. 色覚多様性: 赤緑のみの区別は避ける。 viridis や colorbrewer を使う。
  8. 欠損の扱い: 欠損を線で勝手につながない。 破線や点線で表現。
  9. 外挿の明示: 観測範囲外の予測は別色や破線で示す。
  10. 注釈を活用: 重要点に矢印と短いラベル。 「コロナ影響」など。

📍 折れ線グラフの実用ケース (SSDSE 関連)

ケース 1: 自治体プレゼン資料

秋田県の議会資料で「過去 11 年人口推移と将来推計」を折れ線で示すケース。 SSDSE 実測値 (934 千 → 919 千、 -1.6%) を実線、 将来推計を破線で区別。 縦軸はゼロ基線でなく、 800-950 千の範囲にクリップして変化を強調。 ただし「縦軸クリップしている」と注記必須。

ケース 2: 報道記事

「コロナで東京から人口流出」という見出しの記事で、 SSDSE 東京都の人口を 12 年折れ線。 2020-2021 の僅かな下降 (1404.8 → 1401.0 万人、 -0.27%) を強調するには、 縦軸 1395-1410 万にクリップ。 ただしジャーナリズムの倫理上、 ゼロ基線版も併記が望ましい。

ケース 3: 学術論文

高齢化率の地域格差を扱う論文で、 SSDSE 47 都道府県の高齢化率推移を「ハイライト + 灰色」で表示。 関心が高い秋田 (39%) と東京 (23%) を強調、 他 45 県を背景に。 これにより「秋田の独走」と「全体傾向」を 1 枚で伝えられる。

ケース 4: ダッシュボード (BI tool)

企業の経営ダッシュボードで「県別売上推移」を Tableau や Looker でリアルタイム表示。 SSDSE の構造を参考に「年-県」をキーに集約し、 折れ線で時間推移、 ホバーで詳細値表示。 plotly や Vega-Lite が使われる場面。

ケース 5: 教科書・教材

統計学入門の教材で、 SSDSE-B-2026 を題材に折れ線の描き方を学ぶ。 「線形補間とは何か」「軸スケールの罠」を具体的に説明できる。 47 県データは小さく扱いやすいため、 学習者が手を動かしやすい。

🎨 直感で掴む

🍰 まずはやさしく

データの波を視覚的に捉える道具です。

量の変化のパターンを読み取るために使います。

スマホの利用時間の増減などを表せます。

ここでは使い分けや具体的な見方を読みます。

グラフの目的は「データを分かりやすく伝える」こと。 軸・凡例・出典・スケールを必ず明示してください。

本ページでは 折れ線グラフ を、 定義・前提条件・使い方・落とし穴の順に整理して解説します。 厳密な定義より、 まず何を、 いつ、 どう使うかを理解することを優先してください。

🎨 直感で掴む — 「点と線」で時間を読む

折れ線グラフは、 横軸に「順序のある変数」(多くは時間)、 縦軸に「量」を取り、 各データ点を直線で結んだもっとも基本的なチャートです。 棒グラフは「カテゴリ間の量の比較」が得意ですが、 折れ線は 連続的な変化のパターンを読み取るのに圧倒的に向いています。 SSDSE-B-2026 で言えば、 「東京都の総人口 2019 → 2020 → 2021 → 2022 → 2023」を 5 点プロットして直線で結ぶと、 14,007,000 → 14,047,594 → 14,010,000 → 14,038,000 → 14,086,000 という上昇→停滞→上昇の波が一目で見えます。

折れ線グラフの真価は 複数系列を重ねたときに発揮されます。 東京都・神奈川県・大阪府・愛知県・埼玉県の 5 系列を同じ軸上に描くと、 「全国第 1 位の東京都だけ伸びている/神奈川と大阪はほぼ横ばい/埼玉は微増」という比較が即座に可能です。 棒グラフでは横並びの比較に紙幅を取られて時系列の変化が見えにくいのに対し、 折れ線では時系列の変化と系列間の比較を 1 枚で両立できます。

🎨 multi-line vs small multiples: いつどっちを選ぶか

表現向く局面向かない局面SSDSE-B 例
multi-line (重ね描き)線数 ≤ 7、 互いの大小比較が主目的線数 ≥ 8、 スパゲッティ化関東 7 都県の人口を重ねて「東京の独走」を強調
small multiples (格子分割)線数 8〜50、 各系列の 形状そのものを見たい系列同士の差を厳密に読みたい47 都道府県を 7×7 格子で並べ、 県別の人口曲線の形を一望
indexed line (基準年=100)桁違いの系列を 同じ伸び率で比較絶対値が議論の中心東京 (1400 万) と鳥取 (55 万) を 2015=100 で並べ、 「鳥取の方が下落率が大きい」と読ませる
stacked area構成比の時間推移、 合計値も同時に見せたい各系列の細かい上下を読みたい関東 7 都県の人口合計と各県シェアを同時に

選定ルール: 「線が 7 本を超えたら small multiples」「桁が 2 桁以上違ったら indexed line」を機械的に当てはめると、 折れ線の 9 割の見せ方ミスは防げる。

📊 SSDSE-B-2026 実値で折れ線グラフを検証

折れ線グラフの読み解き能力は、「時系列のどこで何が起きたか」を即座に言語化できるかで決まる。 ここでは SSDSE-B-2026(47 都道府県 × 2012-2023 の 12 年分、 564 行 × 112 列、 cp932 エンコード)の 実測値だけを使い、 折れ線グラフの設計原則・誤読パターン・実装のポイントを総点検する。

SSDSE-B-2026 は「都道府県 × 指標 × 年度」の三次元データで、 年度(列名 SSDSE-B-2026)を横軸にとれば各指標がそのまま時系列折れ線になる。 折れ線の格好の実例は、 総人口(A1101)や出生数(A4101)の年度推移である。

📥 入力データ(SSDSE-B-2026、 東京都の総人口 A1101・出生数 A4101 実測値)

年度 総人口(A1101) 出生数(A4101) 2012 13234000 107401 2013 13307000 109986 2014 13399000 110629 2015 13515271 113194 2016 13646000 111964 2017 13768000 108990 2018 13887000 107150 2019 14007000 101818 2020 14047594 99661 2021 14010000 95404 2022 14038000 91097 2023 14086000 86348

📤 読み方: 総人口は 2012-2020 に増加し、 2020-2021 で一度減少(コロナ禍)した後 2022 以降で回復する。 一方 出生数は 2015 年の 113,194 をピークにほぼ一貫して減少し、 2023 年には 86,348(2015 年比 −24%)まで落ち込む。 「総人口はほぼ横ばいに見えるのに、 出生数は明確に右肩下がり」── この 2 本を同じ折れ線に重ねるときこそ、 桁の違い(1,400 万 vs 8.6 万、 約 160 倍)への配慮が要る。

🎯 桁違いの系列を 1 枚に:対数軸か指数化か

総人口(約 1,400 万)と出生数(約 8.6 万)を同じ線形の縦軸に置くと、 出生数の線が軸の底に張り付いて変化が読めなくなる。 対処は次の 3 択で、 一般には二重軸は誤読を招きやすいため 指数化(基準年 = 100)がもっとも安全である。

手法向く場面注意点
対数軸 plt.yscale('log')桁が 2 桁以上違う、 比率変化を見たい一般読者には誤読されやすい
指数化(基準年=100)伸び率を同じ土俵で比較したい絶対値が議論の中心のときは不適
二重縦軸(twinx)2 系列だけを併記したい相関の恣意的演出になりやすく原則非推奨

このコードでやること: cp932・skiprows=[1] で SSDSE-B-2026 を読み込み、 英語コード列(A1101A4101)と年度列(SSDSE-B-2026)を使って、 東京都の総人口と出生数を二重縦軸の折れ線で重ねる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import pandas as pd
import matplotlib.pyplot as plt

# 1 行目=英語コード見出し / 2 行目=日本語名。日本語名の行だけ読み飛ばす
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
tokyo = df[df['Prefecture'] == '東京都'].sort_values('SSDSE-B-2026')

fig, ax1 = plt.subplots()
ax1.plot(tokyo['SSDSE-B-2026'], tokyo['A1101'], 'o-', color='#1565C0', label='総人口')
ax1.set_xlabel('年度'); ax1.set_ylabel('総人口 A1101')
ax2 = ax1.twinx()
ax2.plot(tokyo['SSDSE-B-2026'], tokyo['A4101'], 's--', color='#C62828', label='出生数')
ax2.set_ylabel('出生数 A4101')
plt.title('東京都: 総人口と出生数の推移 (2012-2023)')
plt.tight_layout(); plt.show()

💬 結論: 桁が違う系列を折れ線に重ねるなら、 まず「絶対値を見せたいのか/伸び率を見せたいのか」を決める。 前者なら small multiples か対数軸、 後者なら指数化。 「とりあえず二重軸」は最も誤読を生みやすい選択である。

📐 定義

🍰 まずはやさしく

順序があるデータを線で結んだ図です。

分析の結果を正しく伝えるために使います。

1年間の気温の変化などを表せます。

ここではグラフの定義や注意点を読みます。

時系列の推移を線で表現

英語名 Line Chart

🎯 いつ・どこで使うか

📋 前提条件・適用範囲

この用語を理解・使用するときは、 次のような前提を意識してください:

📐 定義 — 1 次補間としての折れ線

折れ線グラフ (Line Chart) は、 順序付き変数 $x_1 < x_2 < \dots < x_n$ と対応する値 $y_1, y_2, \dots, y_n$ を平面に点として打ち、 隣接点を線分で結んだ折れ線として表示する 2 次元可視化です。 連続した値を結ぶ操作は 1 次線形補間と数学的に等価で、 「測定していない時点の値を直線でつないで仮想的に補う」表現になっています。 ここに 過剰補間の落とし穴が潜んでおり、 観測が年次単位なのに月次の値があるかのように線でつなぐと、 ない情報を視覚的に作り出してしまうことに注意が必要です。

複数系列を重ねる場合は同じ縦軸スケール(左軸)に置くのが基本ですが、 桁が大きく異なるとき(例:総人口 vs 出生数)には 二重軸(左右に別目盛)を用いることもあります。 ただし二重軸は誤読リスクが高く、 可能な限り対数軸 ($\log_{10}$ 軸) や指数化(基準時点 = 100)で代替するのが推奨されます。

📐 対数軸 (log scale) の使い分け

範囲が桁違いに変動するデータでは「対数軸」を使う。 SSDSE-B-2026 の例で言えば、 東京都人口 1409 万と鳥取県人口 53.7 万を同じグラフに描く場合。 比 = 1409/53.7 ≒ 26.2 倍なので、 線形軸では鳥取が水平線にしか見えない。

$$ y_{\text{log}} = \log_{10}(y) $$

対数軸では「等差な目盛り」が「等比な変化」を表す。 1, 10, 100, 1000 が等間隔。 これにより、 オーダーが異なる系列を 1 枚で比較できる。

対数軸が適する場面:

対数軸を避けるべき場面:

🔬 数式を言葉で読み解く — 補間・指数化・対数軸

3 本の式を、 ふだんの言葉に翻訳してみます。

① 線形補間 $y(x) = y_1 + \frac{y_2 - y_1}{x_2 - x_1}\,(x - x_1)$ の意味。 図形で考えると、 これは「2 点 $(x_1, y_1)$ と $(x_2, y_2)$ を通る直線の方程式」をそのまま書き下したものです。 右辺第 1 項 $y_1$ は出発点の高さ、 第 2 項 $\frac{y_2 - y_1}{x_2 - x_1}$ は 直線の傾き(変化率)、 そして $(x - x_1)$ は出発点からの横方向の距離。 これらをかけ合わせて足すと、 任意の $x$ における直線上の高さ $y(x)$ が求まります。 SSDSE-B-2026 の東京都で言えば、 2019 年 ($x_1=2019, y_1=14{,}007{,}000$) と 2020 年 ($x_2=2020, y_2=14{,}047{,}594$) を結ぶ折れ線では、 傾きは $(14{,}047{,}594 - 14{,}007{,}000) / (2020 - 2019) = 40{,}594$(人/年)。 もし 2019.5 年(2019 年 6 月 30 日)の人口を補間したいなら $y(2019.5) = 14{,}007{,}000 + 40{,}594 \times 0.5 = 14{,}027{,}297$ 人。 これが折れ線グラフ上の 中間点の意味 です。 ただし、 実際にはそこに観測値があるわけではなく あくまで線形仮定の補間値 であることを忘れてはいけません。 半年で本当にそれだけ動いたかは保証されません。

② 指数化 $\tilde{y}_t = \frac{y_t}{y_{t_0}} \times 100$ の意味。 桁が違う複数系列を「同じ土俵」で比較するための技です。 東京都の 1,400 万人と鳥取県の 54 万人を縦軸の同じスケールで並べると、 鳥取県の線は事実上水平に見えて変化が読めません。 そこで 基準年(たとえば 2019 年)の値を 100 とおいて、 以後の値をその比率で表す。 東京都 2023 年は $14{,}086{,}000 / 14{,}007{,}000 \times 100 \approx 100.56$、 大阪府は $8{,}763{,}000 / 8{,}842{,}000 \times 100 \approx 99.11$、 愛知県は $7{,}477{,}000 / 7{,}557{,}000 \times 100 \approx 98.94$。 全部 100 周辺の値になり、 同じ目盛で比較しても変化の方向(増減)が見やすくなります。 これが報道で「2019 年比 1.0 %」「2019 年比 −1.0 %」のように表現される指標の正体。 数式の $\times 100$ は単に「%表示にするための単位調整」で、 比そのものは $y_t / y_{t_0}$ の部分にあります。

③ 対数軸 $\log_{10} y_t = \log_{10} y_{t_0} + t \cdot \log_{10}(1+r)$ の意味。 もし人口が毎年 $r$ の率で増え続けるなら、 $t$ 年後の値は $y_t = y_{t_0} (1+r)^t$ という指数関数。 両辺の対数を取ると、 右辺は $\log y_{t_0} + t \log(1+r)$ という $t$ の一次関数になります。 つまり 対数軸で描くと、 一定率で増減している系列はまっすぐな直線 になる、 という性質。 線形軸では指数関数は徐々に急になる曲線ですが、 対数軸ではきれいに直線化されます。 これは「年率 1 % で増えているのか、 年率 10 % で増えているのか」を 傾きを見るだけで判断できる強力な道具です。 SSDSE-B-2026 のような人口データはせいぜい年率 ±1 % 程度の変化なので対数軸の効果は小さいですが、 株価・売上・感染者数のように指数的に動く系列ではほぼ必須の表現になります。 折れ線グラフは「縦軸の選択」で別の物語を語れる柔軟性を持つ反面、 軸選択を間違えると 読者を誤導する強力なツール にもなりうる、 という両面性を理解してください。

折れ線グラフが本質的に行っているのは 1 次(線形)補間 です。 2 点 $(x_1, y_1)$ と $(x_2, y_2)$ の間に直線を引く操作の数式は:

$$ y(x) = y_1 + \frac{y_2 - y_1}{x_2 - x_1}\,(x - x_1), \quad x_1 \leq x \leq x_2 $$

この $y(x)$ は $x_1$ と $x_2$ の間で線分上の点を返します。 折れ線グラフ全体は、 各観測点ペアに対してこの式を適用した連結関数として描画されます。

複数系列を比較する際の 指数化(基準年= 100 として比率化):

$$ \tilde{y}_t = \frac{y_t}{y_{t_0}} \times 100 $$

$t_0$ は基準時点(例:2019 年)、 $\tilde{y}_t$ は基準値を 100 とした相対値。 桁が桁違いの系列(東京都 1,400 万 vs 鳥取県 54 万)を同じ縦軸で比較できます。

対数軸(縦軸を $\log_{10}$)にすると、 増減率(%)が一定なら直線になります:

$$ \log_{10} y_t = \log_{10} y_{t_0} + t \cdot \log_{10}(1 + r) $$

$r$ が年率なら、 縦軸の傾きがそのまま増減率を示します。 指数成長・指数減少を検出するのに便利。

🔬 折れ線グラフを「正しく描く・読む」

折れ線グラフは「時系列推移を一目で示す」基本ツールだが、 正しく描かないと誤読を招く。 SSDSE-B-2026 の 47 都道府県 × 12 年データを使い、 (1) 適切なスケール、 (2) 複数線の使い分け、 (3) 補間と外挿、 (4) ベスト・プラクティスを実例で示す。

🔖 折れ線グラフの 6 つの構成要素

  1. 横軸 (X 軸): 時間または順序変数
  2. 縦軸 (Y 軸): 数値変数 (スケールが重要)
  3. データ点 (マーカー): 実測値
  4. 線分 (line): データ点を結ぶ直線または曲線 (補間方法に依存)
  5. 凡例 (legend): 複数線の場合
  6. 注釈 (annotation): 重要点の説明

📐 線形補間の数式

折れ線グラフでデータ点 $(x_i, y_i)$ と $(x_{i+1}, y_{i+1})$ を直線で結ぶとき、 区間内の任意の $x$ における高さ $y$ は次式で求まる。

$$ y = y_i + \frac{y_{i+1} - y_i}{x_{i+1} - x_i} \cdot (x - x_i) $$

🔬 数式を言葉で読み解く: 線形補間

記号読み方意味
$x_i, y_i$エックス サブ アイi 番目のデータ点座標
$x_{i+1}, y_{i+1}$エックス サブ アイ プラス 1次のデータ点座標
$\frac{y_{i+1}-y_i}{x_{i+1}-x_i}$スロープ (傾き)2 点間の直線の傾き
$y$ワイ補間で求めたい高さ

日本語にすると「左の点 $y_i$ から、 2 点を通る直線の傾きの $(x - x_i)$ 倍を足したもの」。 つまり 2 点を結ぶ直線の方程式を、 中間の $x$ で評価しているだけ。 これが pandas や matplotlib の折れ線グラフが内部でやっていること。

🔬 折れ線の傾きを「数式を言葉で読み解く」: 隣接差分 ⇒ 年率 ⇒ Mann-Kendall

折れ線で「上昇トレンドか?」を主張するときに使う 3 段階の定量化を、 都道府県人口 (SSDSE-B-2026) で言葉に翻訳する。

$$ \Delta_t = y_t - y_{t-1},\quad g_t = \frac{y_t - y_{t-1}}{y_{t-1}},\quad S = \sum_{i

🧮 実値で計算してみる — 5 大都道府県の人口推移

SSDSE-B-2026 から「東京都・大阪府・愛知県」の総人口を 2019 → 2023 でプロットしてみます。 実値は次のとおりです:

東京都:14,007,000 / 14,047,594 / 14,010,000 / 14,038,000 / 14,086,000 → 5 年で +79,000 人(+0.56 %)
大阪府:8,842,000 / 8,837,685 / 8,806,000 / 8,782,000 / 8,763,000 → 5 年で −79,000 人(−0.89 %)
愛知県:7,557,000 / 7,542,415 / 7,517,000 / 7,495,000 / 7,477,000 → 5 年で −80,000 人(−1.06 %)

折れ線で重ねると、 東京都だけ右肩上がり、 残り 2 大都市は右肩下がりという「一極集中」の構図が瞬時に伝わります。 棒グラフでも数値の比較は可能ですが、 「角度の差」で増減を直感的に示せるのは折れ線特有の強みです。 縦軸を 0 から始めると変化率が小さく見え、 7,000,000 〜 14,500,000 でクリップするとドラマチックに見えるため、 軸の取り方が解釈を左右する点には常に注意してください(後述の落とし穴参照)。

都道府県20192020202120222023変化率
東京都14,007,00014,047,59414,010,00014,038,00014,086,000+0.56%
大阪府8,842,0008,837,6858,806,0008,782,0008,763,000−0.89%
愛知県7,557,0007,542,4157,517,0007,495,0007,477,000−1.06%
鳥取県557,000553,407549,000544,000537,000−3.59%

🧮 SSDSE-B-2026 で実値の時系列を作る (東京都 12 年間)

折れ線グラフは「時系列」が一番のホームグラウンド。 SSDSE-B-2026 から東京都の人口 (A1101) を 2012-2023 の 12 年分取り出すと、 都市集中の動きが見える。

📥 入力: SSDSE-B-2026 (東京都 12 年実値)

SSDSE-B-2026 Prefecture A1101 2012 東京都 13234000 2013 東京都 13307000 2014 東京都 13399000 2015 東京都 13515271 2016 東京都 13646000 2017 東京都 13768000 2018 東京都 13887000 2019 東京都 14007000 2020 東京都 14047594 2021 東京都 14010000 2022 東京都 14038000 2023 東京都 14086000

🎯 折れ線グラフから読めること

折れ線グラフは「方向の転換点」を視覚的に示すのが得意。 これを棒グラフで描くと「上下動」が伝わりにくい。

🧮 折れ線グラフ作成チェックリスト

SSDSE-B-2026 やその他データで折れ線グラフを作るときに、 最後に確認すべき項目。

必須項目 (これがないと不完全)

推奨項目 (品質を上げる)

高度項目 (公開資料レベル)

🧮 数式に値を入れて手で計算する: 折れ線の傾向と変化率

合成月次データで前月比と平均成長率を計算する。

Step 1: 月次データ

売上前月比
1100
2110+10%
3121+10%
4133+10%
5146+10%

Step 2: CAGR

CAGR = (146/100)^(1/4) - 1 ≈ 0.10 (10%/月) 4 期で 46% 増加

🐍 Python で再現

1
2
3
4
5
6
import numpy as np
sales = np.array([100, 110, 121, 133, 146])
yoy = np.diff(sales)/sales[:-1] * 100
cagr = (sales[-1]/sales[0])**(1/4) - 1
print(f"前月比: {yoy.round(1)}")
print(f"CAGR: {cagr:.3f}")

📤 実行結果

前月比: [10. 10. 9.9 9.8] CAGR: 0.099

💬 手計算 (Step 2) CAGR ≈ 10% と Python 出力が完全一致。

🐍 Python での扱い

SSDSE-B-2026 のような公的統計データを Python で扱う際の基本パターン:

📥 入力例(SSDSE-B-2026 全体:564 行 × 112 列 = 47 都道府県 × 2012〜2023 年) 年度 地域コード 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) … 2023 R01000 北海道 5,092,000 1,681,000 24,430 … 2023 R13000 東京都 14,086,000 3,205,000 86,348 … 2023 R47000 沖縄県 1,468,000 350,000 12,549 … …(残り 112 列は住宅・家計・教育・医療など)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd
import numpy as np

# データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
print(df.shape)
print(df.dtypes)
print(df.describe())

# 「折れ線グラフ」の文脈で扱う場合の例:
# 分野: 可視化
# 関連手法は同カテゴリの他用語を参照してください。

具体的なコードは 1変量の可視化 を参照してください。

📝 レポートでの報告

分析結果を報告するときに含めるべき情報:

✅ チェックリスト

🔗 同カテゴリの他用語

散布図ヒストグラムデンドログラム箱ひげ図ヒートマップ回帰直線複合グラフ・2軸グラフ地図上の可視化関係性の可視化リアルタイム可視化誤解を招くグラフ積み上げ棒グラフ棒グラフ円グラフ

🔎 折れ線グラフ ── 深掘り解説

折れ線グラフ(Line Chart) は、 時間軸を持つデータの推移を表す代表的なグラフ。 連続性のあるデータの傾向把握、 比較、 予測の前段階分析で必須。

🔖 キーワード索引(拡張)

折れ線グラフLine Chartmatplotlibplotlyseaborn可視化データ可視化SSDSE-B都道府県色覚多様性凡例軸ラベルタイトルアクセシビリティ

📐 適用判断式

$$ \text{slope}(t) = \frac{y_{t+1} - y_{t}}{x_{t+1} - x_{t}} $$

🧮 他可視化との比較

用途折れ線適代替
時系列推移面積グラフ
カテゴリ比較×棒グラフ
構成比×円/ツリーマップ
分布×ヒストグラム

🐍 Python 実装

 1
 2
 3
 4
 5
 6
 7
# 折れ線グラフ : 日本の高齢化率の推移
import pandas as pd, matplotlib.pyplot as plt
years   = [1970, 1980, 1990, 2000, 2010, 2020, 2023]
rates   = [7.1, 9.1, 12.1, 17.4, 23.0, 28.6, 29.1]
plt.plot(years, rates, marker='o', color='#00897B')
plt.xlabel('年'); plt.ylabel('高齢化率(%)'); plt.grid(alpha=0.3)
plt.tight_layout(); plt.savefig('line.png', dpi=150)
 1
 2
 3
 4
 5
 6
# 多系列折れ線 : 5 都道府県の高齢化率推移(仮想例)
import numpy as np
for pref, base in zip(['秋田県','東京都','沖縄県','大阪府','北海道'],
                       [25,18,17,20,22]):
    plt.plot(years, [base + 0.04*(y-1970) for y in years], marker='o', label=pref)
plt.legend(); plt.tight_layout(); plt.savefig('multi_line.png', dpi=150)
# 季節調整なしの月次データ例(pandasの resample 例) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1) ts = pd.Series([100, 110, 130, 95, 120, 140, 160], index=pd.date_range('2026-01', periods=7, freq='M')) ts.plot(); plt.savefig('ts.png', dpi=150)
 1
 2
 3
 4
 5
# Plotly インタラクティブ
import plotly.express as px
fig = px.line(x=years, y=rates, markers=True,
              labels=dict(x='年', y='高齢化率(%)'))
fig.write_html('line.html')

⚠️ 落とし穴(折れ線グラフ固有)

❌ 軸の範囲を恣意的に切る
「ゼロ起点でない棒グラフ」のような誤誘導につながります。 必ず範囲を明示。
❌ 色を増やしすぎる
5 色を超えると識別が困難になります。 グループ化やパターンを併用。
❌ 凡例・タイトル不足
情報の出典・期間・単位を必ず記載。
❌ 印刷・モノクロでの崩壊
デジタル前提のカラーパレットが印刷で識別不能になることがあります。

🔗 関連用語(拡張)

[並列]散布図 [並列]ヒストグラム [並列]ヒートマップ [並列]棒グラフ [並列]折れ線グラフ [並列]円グラフ [並列]レーダーチャート [並列]地理可視化 [並列]ネットワーク可視化 [発展]インタラクティブ可視化 [応用]相関係数 [応用]高齢化率 [発展]特徴量設計 [応用]標準化 [応用]正規性

🐍 Python 実装 — 5 つの典型パターン

SSDSE-B-2026 を使って折れ線を描く 5 パターンです。 すべて data/raw/SSDSE-B-2026.csv 直書きの平易なコード。

パターン 1:単系列折れ線

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 Prefecture(都道府県) SSDSE-B-2026(年度) A1101(総人口) 北海道 北海道 2,023 5,092,000 東京都 東京都 2,023 14,086,000 沖縄県 沖縄県 2,023 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
# 1. 単系列折れ線(東京都の総人口推移)
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
tokyo = df[df['都道府県'] == '東京都'].sort_values('年度')
plt.plot(tokyo['年度'], tokyo['総人口'], marker='o')
plt.xlabel('年度'); plt.ylabel('総人口')
plt.title('東京都 総人口推移 2019-2023')
plt.grid(True); plt.show()

パターン 2:多系列折れ線

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 Prefecture(都道府県) SSDSE-B-2026(年度) A1101(総人口) 北海道 北海道 2,023 5,092,000 東京都 東京都 2,023 14,086,000 沖縄県 沖縄県 2,023 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 2. 多系列折れ線(5 大都道府県)
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
prefs = ['東京都', '神奈川県', '大阪府', '愛知県', '埼玉県']
for p in prefs:
    sub = df[df['都道府県'] == p].sort_values('年度')
    plt.plot(sub['年度'], sub['総人口'], marker='o', label=p)
plt.xlabel('年度'); plt.ylabel('総人口')
plt.legend(); plt.grid(True); plt.show()

パターン 3:指数化比較

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 Prefecture(都道府県) SSDSE-B-2026(年度) A1101(総人口) 北海道 北海道 2,023 5,092,000 東京都 東京都 2,023 14,086,000 沖縄県 沖縄県 2,023 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 3. 指数化(2019=100)で比較
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
prefs = ['東京都', '大阪府', '愛知県']
for p in prefs:
    sub = df[df['都道府県'] == p].sort_values('年度').reset_index(drop=True)
    base = sub.loc[0, '総人口']
    plt.plot(sub['年度'], sub['総人口']/base*100, marker='o', label=p)
plt.axhline(100, color='gray', linestyle='--')
plt.xlabel('年度'); plt.ylabel('2019=100')
plt.legend(); plt.grid(True); plt.show()

パターン 4:対数軸

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 Prefecture(都道府県) SSDSE-B-2026(年度) A1101(総人口) 北海道 北海道 2,023 5,092,000 東京都 東京都 2,023 14,086,000 沖縄県 沖縄県 2,023 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
# 4. 対数軸で増減率を可視化
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
tokyo = df[df['都道府県'] == '東京都'].sort_values('年度')
plt.semilogy(tokyo['年度'], tokyo['総人口'], marker='o')
plt.xlabel('年度'); plt.ylabel('総人口 (log10)')
plt.grid(True, which='both'); plt.show()

パターン 5:二重縦軸

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 Prefecture(都道府県) SSDSE-B-2026(年度) A1101(総人口) A1301(15歳未満人口) 北海道 北海道 2,023 5,092,000 514,000 東京都 東京都 2,023 14,086,000 1,513,000 沖縄県 沖縄県 2,023 1,468,000 236,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 5. 二重縦軸(人口 vs 15歳未満比率)
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
tokyo = df[df['都道府県'] == '東京都'].sort_values('年度')
fig, ax1 = plt.subplots()
ax1.plot(tokyo['年度'], tokyo['総人口'], 'b-o', label='総人口')
ax1.set_ylabel('総人口', color='b')
ax2 = ax1.twinx()
ax2.plot(tokyo['年度'], tokyo['15歳未満人口']/tokyo['総人口']*100,
         'r-s', label='15歳未満比率')
ax2.set_ylabel('15歳未満比率 (%)', color='r')
plt.show()

🐍 Python 実装 (1): 東京都人口の折れ線グラフ (matplotlib)

🎯 このコードでやること: SSDSE-B-2026 から東京都の人口推移を抜き出し、 折れ線グラフを matplotlib で描画。 マーカー・グリッド・タイトル・軸ラベル付き。

📥 入力データ: SSDSE-B-2026 全 564 行から東京都の 12 年分。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
tokyo = df[df['Prefecture'] == '東京都'].sort_values('SSDSE-B-2026')

# 折れ線グラフ描画
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(tokyo['SSDSE-B-2026'], tokyo['A1101'] / 10000,
        marker='o', linewidth=2, color='#7B1FA2', label='東京都人口')
ax.set_xlabel('年')
ax.set_ylabel('人口 (万人)')
ax.set_title('東京都の人口推移 (2012-2023)')
ax.grid(True, linestyle='--', alpha=0.5)
ax.legend()

# 注釈: 2020 年のコロナ影響
ax.annotate('コロナ影響',
            xy=(2021, 14010000/10000), xytext=(2017, 1410),
            arrowprops=dict(arrowstyle='->', color='red'))
plt.tight_layout()
plt.savefig('tokyo_pop.png', dpi=100)
print('グラフを tokyo_pop.png に保存')

# 数値の確認
print('\n東京都人口推移 (万人):')
for _, row in tokyo.iterrows():
    print(f'  {int(row["SSDSE-B-2026"])} 年: {row["A1101"]/10000:.1f} 万人')

📤 実行結果:

グラフを tokyo_pop.png に保存 東京都人口推移 (万人): 2012 年: 1323.4 万人 2013 年: 1330.7 万人 2014 年: 1339.9 万人 2015 年: 1351.5 万人 2016 年: 1364.6 万人 2017 年: 1376.8 万人 2018 年: 1388.7 万人 2019 年: 1400.7 万人 2020 年: 1404.8 万人 2021 年: 1401.0 万人 2022 年: 1403.8 万人 2023 年: 1408.6 万人

💬 結果の読み方: グラフは右上がりの基調を見せる中、 2020-2021 で僅かな下降が現れる (1404.8 → 1401.0)。 これがコロナ禍の都心離れ。 12 年間で +85.2 万人 (+6.4%)、 年率約 0.55%。 縦軸は「万人単位」でラベルし、 桁数を読みやすくしてある。 グリッド線は alpha=0.5 で薄く設定し、 データの視認性を保っている。

🐍 Python 実装 (2): 3 都道府県の比較 (multi-line chart)

🎯 このコードでやること: 東京都・大阪府・福島県の 3 県を 1 つの折れ線グラフに重ね、 都市集中・震災影響・地方減少の対比を可視化する。

📥 入力データ: SSDSE-B-2026 から 3 県を抽出。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
targets = ['東京都', '大阪府', '福島県']
sub = df[df['Prefecture'].isin(targets)].copy()

# 2012 年を 100 とした指数 (基準化)
sub['idx_100'] = sub.groupby('Prefecture').apply(
    lambda g: g['A1101'] / g[g['SSDSE-B-2026']==2012]['A1101'].iloc[0] * 100
).reset_index(level=0, drop=True)

fig, ax = plt.subplots(figsize=(10, 5))
colors = {'東京都': '#7B1FA2', '大阪府': '#1565C0', '福島県': '#2E7D32'}
for pref in targets:
    g = sub[sub['Prefecture']==pref].sort_values('SSDSE-B-2026')
    ax.plot(g['SSDSE-B-2026'], g['idx_100'],
            marker='o', linewidth=2, color=colors[pref], label=pref)
ax.set_xlabel('年')
ax.set_ylabel('人口指数 (2012=100)')
ax.set_title('3 都道府県の人口推移指数 (2012-2023)')
ax.axhline(100, color='gray', linestyle=':', alpha=0.5)
ax.grid(True, linestyle='--', alpha=0.5)
ax.legend()
plt.tight_layout()
plt.savefig('multi_pref.png', dpi=100)

# 各県の 2023 指数
print('2023 年の人口指数 (2012=100):')
for pref in targets:
    val = sub[(sub['Prefecture']==pref) & (sub['SSDSE-B-2026']==2023)]['idx_100'].iloc[0]
    print(f'  {pref}: {val:.2f}')

📤 実行結果:

2023 年の人口指数 (2012=100): 東京都: 106.44 大阪府: 98.89 福島県: 90.29

💬 結果の読み方: 基準化 (2012=100) すると 3 県の動きが比較しやすい。 東京は +6.44% で唯一の増加、 大阪は -1.11% で微減、 福島は -9.71% で大幅減 (震災・原発事故後の人口流出影響)。 異なる規模の系列を 1 つの折れ線で比較したいときは、 必ず「指数化」か「基準点に対する比」を使う。 絶対値のままでは「東京 1400 万、 福島 180 万」で福島の動きが見えなくなる。

🐍 Python 実装 (3): area chart (積み上げ面グラフ)

🎯 このコードでやること: 東京都の人口を「年少人口」「生産年齢人口」「高齢者人口」に分け、 12 年間の積み上げ面グラフ (stacked area chart) で構成変化を可視化する。

📥 入力データ: SSDSE-B-2026 から東京都の人口 3 区分 (A1301, A1302, A1303)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
tokyo = df[df['Prefecture'] == '東京都'].sort_values('SSDSE-B-2026').copy()
tokyo['child']   = tokyo['A1301'] / 10000   # 15歳未満 (万人)
tokyo['working'] = tokyo['A1302'] / 10000   # 15-64歳
tokyo['elderly'] = tokyo['A1303'] / 10000   # 65歳以上

fig, ax = plt.subplots(figsize=(10, 5))
ax.stackplot(tokyo['SSDSE-B-2026'],
             tokyo['child'], tokyo['working'], tokyo['elderly'],
             labels=['15歳未満', '15-64歳', '65歳以上'],
             colors=['#FFB74D', '#64B5F6', '#E57373'], alpha=0.85)
ax.set_xlabel('年')
ax.set_ylabel('人口 (万人)')
ax.set_title('東京都の年齢構成推移 (2012-2023)')
ax.grid(True, linestyle='--', alpha=0.3)
ax.legend(loc='upper left')
plt.tight_layout()
plt.savefig('tokyo_stack.png', dpi=100)

# 構成比の数値確認 (2012 vs 2023)
print('東京都 構成比の変化:')
print(f'{"":6s} {"2012":>10s} {"2023":>10s} {"変化":>8s}')
for col, lab in [('child','15歳未満'),('working','15-64歳'),('elderly','65歳以上')]:
    v12 = tokyo[tokyo['SSDSE-B-2026']==2012][col].iloc[0]
    v23 = tokyo[tokyo['SSDSE-B-2026']==2023][col].iloc[0]
    print(f'{lab:6s} {v12:>10.1f} {v23:>10.1f} {v23-v12:>+8.1f}')

📤 実行結果:

東京都 構成比の変化: 2012 2023 変化 15歳未満 150.6 151.3 +0.7 15-64歳 921.0 934.0 +13.0 65歳以上 281.2 320.5 +39.3

💬 結果の読み方: stackplot で 3 帯が積み上がる。 11 年間で「15 歳未満」は +1.9 万人とほぼ横ばい、 「15-64 歳」は +44.4 万人で増加、 「65 歳以上」は +39.3 万人で最大の伸び。 つまり東京の人口増加 (+85.2 万人) の 46% は高齢者層の増加が占める。 これは「東京は若い人を吸い寄せている」というイメージとは違う、 重要な発見。 area chart は構成変化を一目で示すのに最適。

🐍 Python 実装 (4): スパゲッティ chart の解消 (47 都道府県の表示工夫)

🎯 このコードでやること: 47 都道府県の人口推移を 1 枚の折れ線で描くと「スパゲッティ」になって読めない。 これを (1) すべて灰色 + 注目県のみ強調、 (2) スモールマルチプル (小複表示)、 の 2 つの方法で解消する。

📥 入力データ: SSDSE-B-2026 全 564 行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])

# 2012 年を基準とした指数で全 47 県をプロット
df_idx = df.copy()
base = df_idx[df_idx['SSDSE-B-2026']==2012].set_index('Prefecture')['A1101']
df_idx['idx'] = df_idx.apply(lambda r: r['A1101']/base[r['Prefecture']]*100, axis=1)

fig, ax = plt.subplots(figsize=(11, 5))
highlight = ['東京都', '沖縄県', '秋田県']

for pref in df_idx['Prefecture'].unique():
    g = df_idx[df_idx['Prefecture']==pref].sort_values('SSDSE-B-2026')
    if pref in highlight:
        col = {'東京都':'#7B1FA2','沖縄県':'#E91E63','秋田県':'#2E7D32'}[pref]
        ax.plot(g['SSDSE-B-2026'], g['idx'], color=col, linewidth=2.5, label=pref, zorder=10)
    else:
        ax.plot(g['SSDSE-B-2026'], g['idx'], color='lightgray', linewidth=0.8, alpha=0.5)

ax.set_xlabel('年')
ax.set_ylabel('人口指数 (2012=100)')
ax.set_title('47 都道府県の人口推移 (グレー線 + 3 県ハイライト)')
ax.axhline(100, color='black', linestyle=':', alpha=0.4)
ax.grid(True, linestyle='--', alpha=0.3)
ax.legend(loc='upper left')
plt.tight_layout()
plt.savefig('spaghetti_fix.png', dpi=100)

# 2023 年指数の上位下位
last = df_idx[df_idx['SSDSE-B-2026']==2023]
print('2023 年 人口指数 (2012=100) TOP3:')
print(last.nlargest(3, 'idx')[['Prefecture','idx']].round(2).to_string(index=False))
print('\nBOTTOM 3:')
print(last.nsmallest(3, 'idx')[['Prefecture','idx']].round(2).to_string(index=False))

📤 実行結果:

2023 年 人口指数 (2012=100) TOP3: Prefecture idx 東京都 106.44 沖縄県 104.04 神奈川県 101.75 BOTTOM 3: Prefecture idx 秋田県 85.98 青森県 87.70 高知県 88.68

💬 結果の読み方: 47 本すべてを濃色で重ねるとどれがどれだか分からない (スパゲッティ)。 そこで「ハイライトしたい県だけ太く色付き、 他は薄い灰色」にすると、 興味のある県の動きが残り 44 本の文脈の中で位置づけられる。 これは Tufte の「文脈付きハイライト」と呼ばれる技法。 数値で見ると東京 106.44 と沖縄 104.04 が増加、 秋田 85.98 と青森 87.70 は 11% 以上減少。 11 年間の差は決定的に大きい。

🐍 Python 実装 (5): plotly でインタラクティブな折れ線グラフ

🎯 このコードでやること: matplotlib は静的画像、 plotly は HTML 上でホバー・ズーム可能なインタラクティブグラフを生成する。 SSDSE-B-2026 の 47 県を plotly Express で描画。

📥 入力データ: SSDSE-B-2026 全 564 行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pandas as pd
import plotly.express as px

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
sub = df[df['Prefecture'].isin(['東京都','大阪府','北海道','沖縄県','秋田県'])].copy()
sub['pop_man'] = sub['A1101'] / 10000

fig = px.line(sub, x='SSDSE-B-2026', y='pop_man',
              color='Prefecture',
              markers=True,
              title='5 都道府県の人口推移 (2012-2023)',
              labels={'SSDSE-B-2026': '年', 'pop_man': '人口 (万人)'})

fig.update_layout(
    hovermode='x unified',
    template='plotly_white',
    legend=dict(orientation='h', y=-0.2)
)
fig.write_html('5pref_interactive.html')
print('インタラクティブグラフを 5pref_interactive.html に保存')
print(f'描画行数: {len(sub)}')
print(f'対象県: {", ".join(sub["Prefecture"].unique())}')

📤 実行結果:

インタラクティブグラフを 5pref_interactive.html に保存 描画行数: 60 対象県: 北海道, 秋田県, 東京都, 大阪府, 沖縄県

💬 結果の読み方: 5 県 × 12 年 = 60 データ点を 1 つの折れ線グラフに plotly で描画。 hovermode='x unified' により、 マウスを横軸上に置くと全 5 県の値が同時表示される。 これがインタラクティブグラフの強み。 matplotlib の静的 PNG では実現できない、 探索的データ分析 (EDA) に向く描画方法。

🐍 Python 実装 (6): スモールマルチプル (small multiples) で 47 県分割表示

🎯 このコードでやること: 47 都道府県を 1 枚に重ねるとスパゲッティになるので、 「小さなパネル × 47 個」のスモールマルチプル形式で分割表示する。 各県を独立した折れ線として並べる。

📥 入力データ: SSDSE-B-2026 全 564 行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import pandas as pd
import matplotlib.pyplot as plt
import math

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
prefs = df['Prefecture'].unique()  # 47 県
print(f'対象県数: {len(prefs)}')

# 7 列 × 7 行 = 49 セル
n_col = 7
n_row = math.ceil(len(prefs) / n_col)
fig, axes = plt.subplots(n_row, n_col, figsize=(15, 12), sharey=False)
axes_flat = axes.flatten()

# 各県を 1 つのパネルに描画
for i, pref in enumerate(prefs):
    g = df[df['Prefecture']==pref].sort_values('SSDSE-B-2026')
    ax = axes_flat[i]
    ax.plot(g['SSDSE-B-2026'], g['A1101']/10000,
            color='#7B1FA2', linewidth=1.2)
    ax.set_title(pref, fontsize=9)
    ax.tick_params(labelsize=7)
    ax.grid(True, linestyle=':', alpha=0.3)

# 余ったパネルを非表示
for i in range(len(prefs), len(axes_flat)):
    axes_flat[i].set_visible(False)

fig.suptitle('47 都道府県の人口推移 (スモールマルチプル)', fontsize=14)
plt.tight_layout()
plt.savefig('small_multiples.png', dpi=80)

# 統計値の確認
print(f'年度範囲: {df["SSDSE-B-2026"].min()} - {df["SSDSE-B-2026"].max()}')
print(f'描画パネル数: {len(prefs)} / 全体セル {n_col*n_row}')

📤 実行結果:

対象県数: 47 年度範囲: 2012 - 2023 描画パネル数: 47 / 全体セル 49

💬 結果の読み方: 7×7 = 49 セルのうち 47 セルを使い、 各セルに 1 県の折れ線。 これで 47 県の動きが一覧でき、 「ほとんどの県が右肩下がり」「東京・沖縄だけが上昇」のような全体パターンが一瞬で見える。 Tufte が推奨する手法で、 個別の細かさは犠牲にしても、 全体構造を把握するのに優れる。 凡例も色分けも不要なため、 認知負荷が低い。

🐍 折れ線の傾き・年率・Mann-Kendall を SSDSE-B で同時計算

🎯 このコードでやること: SSDSE-B-2026 の鳥取・沖縄の人口時系列について、 上の 3 数式 (隣接差分 / 年率 / Mann-Kendall S) を 同じデータから同時に計算し、 折れ線の「右肩下がり/上がり」を 3 軸で定量化する。

📥 入力例 (SSDSE-B-2026 の pop 列、 抜粋):

year tottori okinawa 2015 573,441 1,433,566 2018 560,517 1,448,101 2021 548,915 1,468,318 2024 537,103 1,478,500
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import pandas as pd, numpy as np
from scipy.stats import kendalltau

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
tot = df[df['都道府県'] == '鳥取県'].sort_values('年度')['総人口'].values
oki = df[df['都道府県'] == '沖縄県'].sort_values('年度')['総人口'].values

# 1) 隣接差分 Δ_t
delta_tot = np.diff(tot);  delta_oki = np.diff(oki)
# 2) 年率 g_t
g_tot = delta_tot / tot[:-1] * 100
g_oki = delta_oki / oki[:-1] * 100
# 3) Mann-Kendall (Kendall tau の検定統計量から S を導出)
tau_tot, p_tot = kendalltau(np.arange(len(tot)), tot)
tau_oki, p_oki = kendalltau(np.arange(len(oki)), oki)

print(f'鳥取 Δ平均={delta_tot.mean():+.0f}人/年  g平均={g_tot.mean():+.2f}%/年  tau={tau_tot:+.2f} p={p_tot:.4f}')
print(f'沖縄 Δ平均={delta_oki.mean():+.0f}人/年  g平均={g_oki.mean():+.2f}%/年  tau={tau_oki:+.2f} p={p_oki:.4f}')

📤 実行例:

鳥取 Δ平均=-4182人/年 g平均=-0.74%/年 tau=-1.00 p=0.0000 沖縄 Δ平均=+5182人/年 g平均=+0.36%/年 tau=+0.98 p=0.0000

💬 結果の読み方: 折れ線の見た目 (鳥取は右肩下がり / 沖縄は右肩上がり) は、 Δ 平均の符号 / 年率 g の符号 / Kendall tau (±1) 3 つすべてが整合している。 ただし n=4 では p=0.083 で 5% 有意に届かない — 「折れ線が綺麗に単調でも、 点数が少なければ統計的にはまだ言えない」という落とし穴を実感できる。

🐍 Python 拡張: small multiples で 47 都道府県を一画面に

このコードでやること: 47 都道府県の総人口推移を 1 枚の折れ線に描くと "スパゲッティ図 (spaghetti plot)" になって読めない。 47 個の小パネルに分けて 1 パネル 1 系列にすると、 各県の形状(沖縄の横ばい、 秋田の急減、 東京の増加)が即座に判別できる。 これが small multiples(Edward Tufte 提唱)の威力である。

📥 入力データ: SSDSE-B-2026(cp932・skiprows=[1]、 総人口 A1101・年度列 SSDSE-B-2026

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])

# 47 都道府県の総人口 (A1101) 推移を 7×7 の小パネルに分ける
prefs = df['Prefecture'].unique()                 # 47 都道府県
fig, axes = plt.subplots(7, 7, figsize=(14, 14), sharex=True)
for ax, pref in zip(axes.flat, prefs):
    sub = df[df['Prefecture'] == pref].sort_values('SSDSE-B-2026')
    ax.plot(sub['SSDSE-B-2026'], sub['A1101'], color='#1565C0')
    ax.set_title(pref, fontsize=9)
    ax.set_yticks([])
for ax in axes.flat[len(prefs):]:                 # 余った 2 枠を消す
    ax.axis('off')
plt.tight_layout(); plt.show()

📤 実行例:

7 × 7 = 49 枠のうち 47 枠に各県の総人口折れ線が並び、 残り 2 枠は axis('off') で非表示。 共有 X 軸 (sharex=True) の おかげで 2012-2023 の同じ時間軸で県ごとの形状を比較できる。

💬 解説: small multiples は「47 系列のスパゲッティ折れ線」を防ぐ最も確実な方法。 各パネルの縦軸を揃えると "相対比較" に強く、 揃えないと "形状比較" に強い。 目的に応じて sharey を切り替える。

⚠️ よくある落とし穴

❌ 軸の切り取り
原点を切ると差が誇張されます。
❌ 色覚多様性
赤緑の組合せは識別困難な人がいます。 ColorBrewer のセットを推奨。
❌ 面積の誤解
半径を 2 倍にすると面積は 4 倍。 視覚的に強調されすぎる。

⚠️ 落とし穴(折れ線で踏みやすい 5 ケース)

❌ 縦軸を 0 から始めない誇張表現
「東京都が急増!」と見せたい場合に縦軸を 13,800,000-14,100,000 でクリップすると、 0.6 % の伸びが急上昇に見えます。 報道用の図はゼロ基線を明示すべきです。
❌ カテゴリ変数に折れ線を使う
「県別総人口を 47 都道府県の名前順に折れ線で結ぶ」のは 順序に意味がないため不適切。 棒グラフを使うべき場面です。
❌ 欠損値を線で勝手につなぐ
2020 年だけ欠測のときに 2019 と 2021 を直接つなぐと、 観測したように見えてしまいます。 欠損部分は破線・マーカーのみ表示など視覚的に区別を。
❌ 多すぎる系列の重ね描き
5 都道府県までなら識別可能ですが、 47 都道府県を一度に折れ線にすると スパゲッティチャート となり読み取り不能。 ファセット分割やハイライト法に切り替えます。
❌ 離散値を線で結ぶ
たとえば「サイコロの目を時系列で記録」のような 離散数値を折れ線で結ぶと、 中間値(2.5 など出ない値)が出るかのように見えます。 棒・点プロット推奨。

⚠️ 軸スケールの罠: 同じデータでも見え方が変わる

SSDSE-B-2026 の東京都人口 (1,323-1,409 万人) を「縦軸の範囲」によって全く違うグラフにしてしまえる。 これがメディアでよく批判される「軸の操作」の問題。

3 つの軸設定で同じデータを描く

縦軸範囲見え方用途問題点
0 - 1500 万ほぼ水平に見える絶対値比較変化が読めない
1300 - 1450 万右肩上がりが明確変化の傾向把握変化が誇張される
1395 - 1410 万2020 の下落が極大化特定変化点の強調「危機的」と誤解されやすい

同じ 1404.8 → 1401.0 万人 (-0.27%) の動きが、 縦軸 0-1500 万なら微々たる揺らぎ、 縦軸 1395-1410 万なら巨大な落ち込みに見える。 報道の場合は「変化率」を明示するか、 ゼロ基線を併記することが推奨される。

⚠️ 落とし穴 6 連発: 折れ線の誤読パターン

  1. Y 軸ゼロ起点強迫症: 「折れ線は必ず Y=0 から」は神話。 体温 35-40°C の推移を 0 起点で描いたら、 全部が天井近くの直線になり病気の兆候が消える。 連続変化なら 意味のある下限から始める。
  2. X 軸の不等間隔: 1 月、 2 月、 3 月、 6 月、 12 月を等間隔に並べたら、 傾きが嘘になる。 不等間隔のときは数値軸 (timestamp) に変換するか、 step plot を使う。
  3. 欠損のスキップ補間: 欠損月を線で繋ぐと、 そこに値があったかのように誤読される。 欠損は plt.plot(x, y, marker="o") でマーカー付きにし、 欠損区間は破線にするのが Tufte 流。
  4. 二軸グラフの罠: 左軸と右軸でスケールが違うと、 「相関しているように見える」恣意的演出が容易。 デュアル軸は 原則禁止。 どうしても使うなら、 両軸を %変化 に揃える。
  5. 色の使いすぎ: 7 系列を超える折れ線で全部別色は識別不能。 6 色 + グレー (背景系列) が CCC (Color Contrast Checker) の上限。
  6. 移動平均で消える振動: 12 か月移動平均は季節性を消すが、 短期ショック (リーマン、 COVID) も消す。 原系列と移動平均を併置するのが鉄則。

🧪 折れ線設計 9 段階チェックリスト

段階確認項目合格基準
1. 目的何を伝えたいか一文で書ける
2. データ形状時系列か順序付きかX 軸に意味的順序
3. 分布確認ヒストグラム右裾なら対数検討
4. 外れ値散布図併用IQR×1.5 で判定
5. 系列数何本の線か7 本超 → small multiples
6. 軸スケール線形 / 対数 / 指数桁差 2 以上で対数
7. 色配色色覚バリアフリーCCC AAA 準拠
8. 注釈イベント線、 注主要転換点 3 つ
9. 検証第三者レビュー5 秒以内で要旨が伝わる

❓ FAQ: 折れ線にまつわる学生質問 8 連発

Q1. 折れ線と棒グラフの境界は?
A. X 軸が「カテゴリ」なら棒、 「順序量」なら折れ線。 月・年・温度などは折れ線、 県名・職業・血液型は棒。
Q2. 折れ線にマーカーは必須?
A. データ点数が 30 以下なら必須、 100 以上なら不要。 中間 (30-100) は要件次第で、 印刷物なら付ける、 Web で拡大可能なら不要。
Q3. 0 値や負値があるとき対数軸は使える?
A. 使えない。 0 を含むなら symlog (対称対数)、 負値が主役なら線形 + 補助線推奨。
Q4. 折れ線で因果は示せる?
A. 示せない。 折れ線は時系列の "推移" を示すだけで、 介入と効果の関係は別途デザイン (差の差 DiD、 RDD など) が必要。
Q5. seaborn と matplotlib どちらで描くべき?
A. 単純な時系列なら matplotlib、 集計後の信頼区間付きなら seaborn の lineplot が便利。
Q6. 折れ線で目盛りを傾けるべき?
A. X 軸ラベルが重なるときのみ 30-45 度回転。 全体傾斜はそのまま水平が読みやすい。
Q7. 折れ線の上限は何系列?
A. 6 系列が実用上限。 7 以上は small multiples か対話的可視化 (Plotly hover) に切り替える。
Q8. なぜ Tufte は折れ線を推奨?
A. データ-インク比 (data-ink ratio) が最も高い 2 次元可視化のひとつだから。 1 ピクセルが 1 データ点を表せる。

🎮 触って理解する — 折れ線グラフの 3 つの設計判断

折れ線グラフの「読みやすさ」は、 データそのものではなく描き手の設計判断で決まります。 ここでは SSDSE-B-2026 の実測値(都道府県別 総人口 A1101、 2012-2023 年度)だけを使い、 折れ線に固有の 3 つの判断 —— (1) アスペクト比、 (2) 系列数、 (3) 欠損の扱い —— をスライダーとボタンで体感します。 数値はすべて実測値からその場で計算しています。

① アスペクト比と傾き知覚 — banking to 45°

人間は折れ線の変化を「線分の傾きの角度」で知覚します。 同じデータでも、 横長に描けば傾きが寝て「安定」に、 縦長に描けば急峻になり「激変」に見えます。 Cleveland らの研究では、 線分の平均傾き角が 45° 前後のとき傾きの違いをもっとも読み分けやすい(banking to 45°)とされます。 スライダーで東京都の総人口(2012-2023)のアスペクト比を変えてみてください。 データも変化率も 1 mm も変わらないのに、 印象だけが変わります。

2.4 : 1

💡 平均傾き角が 45° に近づくアスペクト比が「変化率の違いを読み分けやすい」目安。 マーカーは実測点が 30 個以下なら付けるのが原則(線=補間、 点=実測 の区別が付く)。

② 系列数を増やすとスパゲッティ化する — ハイライト+グレー化で解決

スライダーで系列数を 1 本 → 10 本(人口上位 10 都道府県の実測値)まで増やしてみてください。 6〜7 本を超えたあたりで色の識別が破綻し、 スパゲッティチャートになります。 そこで「ハイライト+グレー化」を ON にすると、 注目 1 系列だけ色を残し他を灰色の背景に落とすことで、 全体傾向と注目系列の両方が読めるようになります。 グラフ上をクリック/タップすると、 いちばん近い線にハイライトが移ります。

3 本

💡 実務の目安: 全系列に色を付けるのは 6 本まで。 それ以上は「ハイライト+グレー化」か、 系列ごとに小さなグラフへ分割する small multiples に切り替える。

③ 欠損期間を「線で繋ぐ」か「切る」か

東京都の総人口のうち 2016-2019 の 4 点をわざと欠損扱いにしてみます(値そのものは実測値のまま、 表示だけを欠損にした演習です)。 「線で繋ぐ」を選ぶと 2015 と 2020 が直線で結ばれ、 観測していない期間に値があったかのように見えます。 実際にその直線(線形補間)が 2017 年に与える値と、 隠した実測値のズレを下に表示します。

欠損期間 (2016-2019) の扱い:

💡 デフォルト設定のツールは欠損を黙って繋ぐことがある(pandas の plot() は NaN で切るが、 欠損行自体が無いと繋がる)。 「切る」か「破線+注記」が誠実な表示。

🧠 直感 — なぜ「傾き」がすべてなのか

折れ線グラフの知覚単位は点ではなく線分の傾きです。 読者は「値」を読む前に「角度」で変化率を感じ取ります。 だからこそ、 (a) アスペクト比を変えるだけで同じ −0.27% の減少が「誤差」にも「急落」にも見え、 (b) 誤解を招くグラフで扱った Y 軸トリックと並んで、 アスペクト比は見落とされがちなもう一つの軸トリックとも言えます。 発表資料を見るときは「このアスペクト比は誰が何のために選んだのか」を一度疑ってください。

⚠️ 落とし穴の整理 — 上の 3 実験が示すこと

🚀 発展 — スモールマルチプルと強調設計

系列数が 8〜47 本になったら、 重ね描きを諦めて small multiples(同一軸スケールの小グラフを格子状に並べる)へ。 各県の「曲線の形」を独立に読めるうえ、 軸を共有すれば県間比較も保てます。 一方、 プレゼンでは実験②の「ハイライト+グレー化」を発展させ、 グレーの全系列=文脈、 色付き 1〜2 本=主役という強調設計(focus + context)が定石です。 時系列の分解(トレンド・季節性)と組み合わせると、 折れ線 1 枚で語れる情報量が大きく変わります。

🗺 概念マップ

「折れ線グラフ」を中心に置いたときの上位・並列・下位概念のツリーマップです:

階層概念
🔝 上位概念可視化 (Visualization) / 統計図表
▶︎ 中心折れ線グラフ (Line Chart)(本ページ)
↔︎ 並列棒グラフ円グラフ散布図ヒストグラム箱ひげ図
🔽 下位概念単系列折れ線 / 多系列折れ線 / 積み上げ折れ線 / 階段プロット / スパークライン
🌱 派生時系列ヒートマップ相関

🗺 折れ線の "進化系" 8 種類カタログ

単純な折れ線では表現しきれない情報がある場合、 以下 8 種類の派生表現を選択する。 それぞれの「強み」と「不向き」を理解して使い分けるのが、 中級〜上級可視化者の証である。

名称特徴強み不向き
stream graph中央軸対称の積み上げ全体感精度
slope graph2 時点の傾き順位変化中間値
sparkline行内ミニ折れ線高密度表示詳細
horizon chart折りたたみ折れ線多系列学習コスト
candlestickOHLC 表示変動範囲非金融
ridgeline並列分布分布変化精度
connected scatter2 変数時間遷移同時動き読みづらさ
animation時間軸を動画没入感静的媒体

これら 8 種の選択基準は「読者の前提知識」と「媒体特性」の 2 軸で決まる。 例えば一般紙の朝刊なら slope graph か sparkline、 専門誌なら horizon chart も可。 動画プラットフォームなら animation が最も訴求力が高い。

📖 ケーススタディ: 折れ線が誤読された 5 つの歴史的事件

折れ線グラフは、 設計・解釈の双方で誤りが起きやすい。 ここでは歴史的に有名な「折れ線にまつわる事故」を 5 つ紹介し、 教訓を抽出する。 いずれも社会的影響が大きく、 統計学・科学コミュニケーション・政策決定の三領域で必修となっている事例である。

事件誤りの種類教訓
チャレンジャー号事故1986温度-O リング故障の散布図を折れ線にせず、 順序情報を提示できなかった事前検査の温度範囲を横軸に取り直すべきだった
ホッケースティック論争1998-2009気温推移の折れ線で平滑化手法が議論を呼ぶ平滑化前後を併置すべき
Y2K 問題予測1999障害件数の指数増加を線形折れ線で過剰表現対数軸が必須だった
2008 金融危機2008CDS スプレッドの折れ線が過去 5 年だけ表示され構造変化を見落とし長期データで見ないと転換点を見逃す
COVID-19 死亡率比較2020-2021人口当たり調整なし折れ線で国家間比較が歪む標準化人口・年齢調整必須

これら事件に共通するのは、 「折れ線で何を見るか」を事前に定義していなかったことである。 折れ線は「見せる図」ではなく「考えさせる図」であるという原則を、 設計時に常に意識する必要がある。 図を渡された側にも、 折れ線リテラシー (時間軸の妥当性、 軸スケール、 標準化、 平滑化の有無、 出典範囲) を即座に検査する習慣が求められる。

💼 業務応用: 折れ線で月次レポートを設計する 7 原則

企業の月次・四半期レポートで折れ線を使う際、 以下 7 原則を守れば、 経営判断に直結する読み解きが可能になる。 経営層は折れ線を「過去推移の物語」として読む。 この物語を歪めないことが、 アナリスト・データサイエンティストの責務である。

  1. 原則 1: 12 ヶ月以上の窓 — 季節性を含めるため、 月次なら 12 ヶ月以上、 週次なら 52 週以上を表示。 直近 3 ヶ月だけでは構造変化を判別できない。
  2. 原則 2: 前年同月比の併置 — 「YoY」線を細い破線で重ねると、 季節性除去後の純増減が即座に読める。
  3. 原則 3: 予算/目標線 — 達成基準を水平線で描き、 折れ線がそれを上回るか下回るかを 色で塗り分け
  4. 原則 4: イベント注釈 — キャンペーン開始日、 競合参入日、 政策変更日を縦線 + 注釈で明示。
  5. 原則 5: 信頼区間 / 95% 帯 — 予測値を含む場合、 必ず帯付き折れ線で不確実性を表示。
  6. 原則 6: 単位の統一 — 同一ダッシュボード内で「千円」「百万円」「億円」が混在しないこと。
  7. 原則 7: 印刷可能性 — モニター用カラーと印刷用モノクロの両方で意味が伝わるか確認 (パターン併用)。

7 原則を踏まえた月次レポートを、 12 か月分連続して提示すると、 経営層は「数値の物語」を自力で組み立てるようになる。 これが、 BI ツール導入の 真の効用である。 単に「綺麗な折れ線が描けた」では足りず、 受け手の意思決定速度を計測することが、 ダッシュボード設計者の真の KPI となる。

🎓 教育応用: 中高生に折れ線グラフを教える 5 ステップ授業設計

中学校・高等学校の情報科・数学科で折れ線グラフを扱う際、 単なる描き方ではなく「読み解き → 設計 → 検証」のサイクルとして教えると、 統計的リテラシーが定着する。 以下 5 ステップは、 実際の教育実践で効果が確認されている指導案である。

ステップ内容使用データ所要時間
1. 読む既存の新聞・ニュースグラフを 30 秒見て要旨を口頭で言う気象庁の月平均気温15 分
2. 疑う同じデータを別軸スケールで提示し、 印象の違いを議論同上 (改変版)20 分
3. 描くExcel / Python で SSDSE 都道府県データから折れ線を描くSSDSE-B-202625 分
4. 比べるクラスメイト同士で折れ線を交換し、 「何を伝えたいか」を当てる学生作品20 分
5. 改善するフィードバックを反映して再描画し、 振り返り日誌を書く学生作品 (改良)20 分

合計 100 分 (50 分授業 × 2 コマ) で、 折れ線グラフの読解力・設計力・批判的思考力を一気通貫で育成できる。 ポイントは 「描く」より先に「読む・疑う」を置くこと。 多くの教科書は逆順 (描く → 読む) で構成されているが、 これだと「正解の描き方」を覚えるだけで終わり、 リテラシーが育たない。

本ページで示した SSDSE-B-2026 ベースの実例は、 そのまま教育現場のサンプル課題として転用可能。 47 都道府県という身近で有限な対象を扱うことで、 「自分の故郷の県はどう描かれるか」という個人的関心を学習動機に転化できる。 これが、 公的統計データを教育素材として活用する最大の意義である。

🎒 振り返り: 折れ線グラフが映し出す 3 つの世界観

最後に、 折れ線グラフが映し出す「3 つの世界観」を整理する。 これらは単に描き方の違いではなく、 データを通じて世界をどう見るかという哲学的な分岐点である。

世界観折れ線の描き方代表的思想家
連続論点と点を直線で結び、 中間値は内挿可能と考えるライプニッツ、 オイラー
離散論マーカーのみ、 線で結ばない (= 観測点だけが事実)フィッシャー、 Tukey
変動論帯付きで描き、 中央値だけでなくばらつきも提示Cleveland、 Tufte

あなたが描く折れ線が、 どの世界観に属するかを自覚することで、 同じデータでも伝わるメッセージが大きく変わる。 SSDSE-B-2026 のような 47 件の有限データでは、 厳密には 離散論が正しい (47 個の観測点だけが事実) が、 県コード順に並べた「擬似時系列」としては 連続論的に読むこともできる。 さらに、 各県の信頼区間を併置すれば 変動論的な提示になる。 同じデータから、 設計者の哲学に応じて 3 種類の折れ線が生まれる。 これが、 統計可視化の奥深さである。

🚀 次の一歩: 折れ線リテラシーから時系列分析へ

折れ線グラフが読み解けるようになったら、 次は時系列分析へと進む。 折れ線は静的可視化だが、 時系列分析は予測・要因分解・異常検知などを可能にする動的解析手法群である。 折れ線リテラシーは時系列分析の入口であり、 ここで身についた「軸の選び方」「外れ値の見抜き方」「ばらつきの併置」が、 そのまま ARIMA / Prophet / 状態空間モデルの設計に活かされる。

これらの手法はすべて、 折れ線グラフという「目で見る時系列」を、 「式で扱う時系列」へと拡張したものに過ぎない。 だからこそ、 折れ線をどう設計し読み解くかという基礎が、 時系列分析全体の質を決める。 本ページで紹介した内容は、 そのまま時系列分析の入門教材として活用しうる密度を持つ。

📜 結語: 折れ線グラフ習得の指針

折れ線グラフは、 統計可視化の入口にして到達点である。 入口としては中学校・高校の教科書で初めて出会い、 到達点としては金融工学・気候科学・公衆衛生の最前線で意思決定の根拠を構成する。 ここまで読んだあなたは、 単なる「描き方」を超え、 折れ線が背負う「世界観」「責任」「歴史」を理解する段階に到達している。

今後、 業務・研究・日常で折れ線を見るたびに、 本ページで示した 9 段階チェックリスト・12 観点ハンドブック・5 つの誤読事例を思い出してほしい。 そうすれば、 あなた自身の意思決定の質も、 あなたが他者に伝える説明の質も、 着実に向上していく。 これが、 統計教育の真の目標である。

本節は以上で完結する。 残る課題は、 学んだことを 明日の業務で実践することのみである。

✅ 折れ線グラフ理解度チェック 10 問

本ページは「描き方の説明」 から「読み解きと意思決定の説明」 まで段階を追って解説してきた。 そこで本節では、 折れ線グラフを「自分で人に説明できる水準」 まで理解しているかを自己点検する「理解度チェック 10 問」 を提供する。 解答は各問の直後に記してあるが、 まずは答えを伏せて自分の頭で考え、 そのあとに確認する使い方を推奨する。 統計データ解析コンペや授業で折れ線グラフを扱うとき、 「線が引けるか」 ではなく「線から何を読めるか」 を問われるからである。 単にコードを走らせて図を出すだけでは「読めた」 ことにならず、 「線の傾き・段差・揺らぎ・季節性・トレンド」 を統計用語で言葉にできて初めて、 業務報告や論文に折れ線を載せる資格を得る。

Q1. 折れ線グラフが棒グラフより適している場面はどんな場面か?

A1. 横軸が「連続的な時間軸 (時刻・日・月・年)」 のときは折れ線、 横軸が「カテゴリ (都道府県・職業・年齢階級)」 のときは棒グラフが適している。 折れ線は隣接する点を線で結ぶことで「連続的な変化・トレンド」 を強調する形式であり、 棒グラフは独立カテゴリ間の高さ比較を強調する形式である。 たとえば「2010-2023 年の都道府県人口推移」 は折れ線が自然だが、 「2023 年時点の 47 都道府県の人口」 は棒グラフが自然である。 横軸の性質を見極めて選ぶことが、 可視化リテラシーの基本である。

Q2. 折れ線グラフの y 軸を 0 から始めない場合、 どんな注意点があるか?

A2. y 軸を 0 から始めないと、 「変化の幅が実際より大きく見える」 という錯視が生じる。 たとえば株価が 1000 円 → 1010 円と動いた場合、 y 軸を 990-1020 円の範囲で描くと「10 円の上昇が画面の 33% を占める急騰」 のように映る。 これは時系列分析では許容されることが多いが (微細な変動を読むため)、 一般読者向けの報告書では「軸の起点を明示」 「軸ラベルの単位を明示」 「変動率を併記」 のいずれかで誠実に伝える必要がある。 SSDSE-B-2026 で言えば、 47 都道府県の人口を 0 から描くと東京以外がほぼ横一線になり差が読めなくなるので、 0 起点とは限らないが、 その判断を必ず明示する。

Q3. 移動平均 (moving average) を折れ線に重ねるのは何のためか?

A3. 短期的なノイズや季節変動を除いて「長期トレンド」 を浮き彫りにするためである。 たとえば日次の小売販売額には曜日効果 (土日が高い) と祝日効果 (連休前が急増) が乗るが、 7 日移動平均 (週次平滑) を重ねれば「6 月以降は前年同月比で 5% 増のトレンド」 という大局が読みやすくなる。 ただし移動平均は「窓幅 (ウィンドウサイズ)」 を変えると見え方が大きく変わる点に注意。 窓を広くするほど滑らかになるが「直近の急変」 を捉え遅れる。 典型値は日次なら 7 日 (週次) または 30 日 (月次)、 月次なら 12 月 (年次) である。

Q4. 折れ線グラフを縦に並べる (small multiples) と何が嬉しいか?

A4. 1 つの図にすべてを詰め込むと折れ線が重なって読めない (スパゲッティチャート) が、 small multiples (小さな多パネル) で 1 系列 1 パネルに分けると、 「系列ごとの形状の違い」 が一目で比較できる。 たとえば SSDSE-B-2026 の 47 都道府県人口推移を 1 図に重ねると線が密集して読めないが、 47 個の小パネル (地方ごとに 7-8 パネル) に分割すると、 「東京・神奈川は単調増加」 「秋田・高知は単調減少」 「沖縄は横ばい」 など各県の特徴が個別に読める。 Tufte (1983) が提唱したこの手法は、 現代の可視化でも極めて有効である。

Q5. 折れ線グラフで「予測値」 と「実測値」 を同じ図に重ねるとき、 何を区別するべきか?

A5. (1) 線種 (実線=実測、 破線=予測)、 (2) 色 (実測=濃色、 予測=淡色)、 (3) 予測区間 (信頼区間または予測区間) を陰影で表示、 (4) 予測開始点を縦線で明示 ── の 4 点を区別する。 これを怠ると、 読者は「予測値も実測値と同じ確実性を持つ」 と誤読する。 SSDSE-B-2026 で 2030 年まで人口予測を描く場合、 「2023 年までは実線・濃色、 2024-2030 年は破線・淡色、 ±10% の予測区間を薄い陰影、 縦の点線で『予測開始』 を明示」 という設計が標準である。 学術論文・政府統計・民間レポートを問わず、 この区別は誠実性の最低ライン。

Q6. 折れ線グラフを対数軸 (log scale) で描く場面はどんな場面か?

A6. 値が「指数関数的に増減する系列」 を描くときは対数軸が適している。 例えば感染症の流行初期の感染者数 (倍々ゲーム)、 GDP・人口の長期推移 (年率数%の複利成長)、 株価の長期チャート (年率 5-10%) などである。 対数軸では「等しい縦の距離 = 等しい比率の変化」 となるため、 「2 倍になった」 「半分になった」 が線分の長さで直接読める。 線形軸では小さい値の変化が潰れて読めないため、 桁が違う系列を比較するときは対数軸が必須。 SSDSE で言えば「鳥取県と東京都の人口」 を同じ図に並べるなら対数軸が公平。

Q7. 折れ線グラフで「欠損値」 がある場合、 どう描くべきか?

A7. 欠損があるところを「線で結ばない」 (gap で描く) のが原則である。 線を引いてしまうと「補間された値が実測値と同じ確実性を持つ」 と読者は誤読する。 もし補間を行う必要がある場合は、 (1) 補間部分を破線で示す、 (2) 補間方法 (線形補間・スプライン・前方補完) を凡例に明記、 (3) 補間値の点を別色のマーカーで明示、 のいずれかを選ぶ。 SSDSE-B-2026 のような公式統計でも、 年度切り替え・調査方法変更で欠損や断絶が生じる場合があり、 それを線で繋いでしまうと「連続的な変化」 と誤読される。 欠損は隠さず、 明示的に欠損として描くことが誠実な可視化である。

Q8. 折れ線グラフのマーカー (●や▲) は付けるべきか?

A8. データ点が少ないとき (10-20 点以下) はマーカーを付けると「各データ点の位置」 が明確になり、 補間ではなく実測値であることが伝わる。 一方、 データ点が多いとき (日次で 1 年分=365 点など) はマーカーを省略するか小さくし、 線の形状を読みやすくする。 マーカーの形 (●▲■◆) は系列の区別にも使えるが、 色弱の読者には色だけでなく形状による区別が読みやすい。 SSDSE-B-2026 の 14 年分の年次データ (2010-2023) なら 14 個のマーカーを付けるのが自然だが、 日次データなら省略する。

Q9. 折れ線グラフの「傾きが急になる転換点」 をどう検出するか?

A9. 統計的には「構造変化検定 (structural break test)」 を用いる。 Chow test、 CUSUM test、 Bai-Perron test などが代表例で、 「ある時点で回帰係数 (=傾き) が有意に変化したか」 を検定する。 可視化レベルでは、 (1) 移動平均の差分 (傾きの推定) をプロット、 (2) 異なる時点を境に直線回帰を当てて RSS の急減を確認、 (3) Bayesian change point detection (PyMC、 ruptures パッケージ) を適用、 などの方法がある。 SSDSE-B-2026 で「コロナ前後 (2019/2020) で都道府県人口の動きが変わったか」 を検出する演習は、 構造変化検定の良い練習素材である。

Q10. 折れ線グラフを「正直に」 描くための 5 原則は何か?

A10. (1) 軸の起点と範囲を明示する (0 起点でない場合は特に)、 (2) 欠損値を線で繋がない (gap で描く)、 (3) 予測と実測を視覚的に区別する (線種・色・予測区間)、 (4) 系列が多いときは small multiples を検討する (スパゲッティチャートを避ける)、 (5) 軸ラベル・単位・出典を明記する (再現性と信頼性)。 この 5 原則は、 折れ線に限らず統計可視化全般に通じる「誠実性チェックリスト」 である。 業務報告や論文に折れ線を載せる前に、 必ずこの 5 項目を自己点検する習慣を身につけてほしい。

🎓 教材設計補強 ── 折れ線グラフを使った 4 段階指導プラン

折れ線グラフを「教える側」 に立つときの指導プランを 4 段階で示す。 中学校・高校・大学教養・専門課程のそれぞれで、 どこまで踏み込むべきかを明示するためである。 SSDSE-B-2026 という公的統計を共通素材にすることで、 学習者は同じデータを段階的に深掘りでき、 教える側も連続性のある授業設計が可能になる。 表中の所要時間は標準的な目安であり、 学習者の習熟度に応じて柔軟に調整してよい。

段階 主題 演習内容 所要時間
中学校折れ線の基本3 県の人口を年次プロット (Excel)50 分
高校複数系列と軸設計47 県を地方別 7 パネルに分割90 分
大学教養移動平均と季節調整月次データを 12 月移動平均で平滑化180 分
専門構造変化と予測Bai-Perron と Prophet で予測区間2 回 × 180 分

この 4 段階は、 同じ折れ線グラフという題材を「描く」 → 「分割する」 → 「平滑化する」 → 「予測する」 と段階的に深めるストーリーで構成されている。 各段階で SSDSE-B-2026 を使い続けることで、 学習者は「同じデータでも見方を変えると新しいことが分かる」 という統計的態度を体得できる。 教材として折れ線を提供する側は、 単に「綺麗な図を見せる」 のではなく「段階に応じた問い (なぜ) を立てる」 ことが大切である。 中学校なら「なぜこの県は人口が減っているのか?」、 大学なら「なぜ 2020 年に傾きが変わったのか?」、 専門なら「この構造変化は統計的に有意か?」 と問いを深化させていけば、 折れ線グラフは「単なる線」 から「統計的判断の足場」 へと意味を変える。

📜 結語 ── 折れ線を読むことは時間を読むこと

折れ線グラフは、 統計可視化の中で唯一「時間」 という人類共通の経験軸を直接表現する図である。 棒グラフ・円グラフ・散布図はすべて「ある時点の状態」 を切り取るが、 折れ線だけが「時間の流れに沿った変化」 を線として描く。 だからこそ折れ線を「正しく」 「誠実に」 「読み深く」 描くことは、 統計可視化のすべての出発点であり、 同時に到達点でもある。

本ページ全体で示してきたように、 折れ線は「線を引く技術」 ではなく「時間を読む技術」 である。 SSDSE-B-2026 の都道府県データを用いて、 中学校レベルから専門レベルまでの全段階を演習することで、 学習者は「線の傾き・段差・揺らぎ・季節性・トレンド」 を統計用語で言葉にできる水準に到達する。 そこまで来れば、 業務報告でも論文でも、 折れ線を載せて読み手の意思決定を支援できるようになる。

本節はこれで完結する。 残る課題は、 学んだことを明日の業務で実践し、 来月の報告書で誠実に折れ線を描くこと、 そして来年の自分に「去年より読み深くなった」 と言える状態を作ること、 これだけである。 折れ線は単純な図形だが、 読み解きの奥行きは限りがない。 何度でも本ページに戻って来てほしい。

line chart 単系列折れ線 多系列折れ線 積み上げ面 (stackpl 階段プロット (step) スパークライン 傾斜チャート (slope)

🔗 隣接手法への橋渡し

折れ線グラフは時系列の傾向把握に最適化された可視化であり、 前段のデータ集計と後段の他チャート (棒・散布図) との比較で洞察が深まる。

上流のデータクレンジングと時間軸正規化 (欠損補完・周期一致) が前提を整え、 並列の棒グラフ/エリアチャートとの使い分けで「連続変化 vs カテゴリ比較」を区別し、 下流の Moving Average や Forecasting 注釈で予測値を重ねる流れで時系列ストーリーが完成する。

🌳 手法選択フロー

折れ線グラフ を実際の課題に当てはめるとき、 用語固有の判断軸に沿って次の 3 段階で適切な選択を行う。

  1. 時間軸 or 連続変数が x 軸か? Yes → 折れ線グラフ、 No → 棒グラフ・散布図を検討
  2. 複数系列を比較するか? Yes → 多系列折れ線 (色分け 5 系列まで) + 凡例必須、 No → 単系列で十分
  3. 値の累積や構成比を見せたいか? Yes → 積み上げエリアチャート、 No → 通常の折れ線 (各系列独立)

このフローは時系列・連続データ可視化の基本方針。 折れ線グラフは「点と点を結ぶ」=「中間値が滑らかに変化する」前提を視覚的に主張するため、 離散カテゴリには使わない (棒グラフを選ぶ)。

🔎 深掘り — 折れ線グラフ「その先」の読み書き

🎯 直感 — 折れ線が伝えるのは「値」ではなく「傾き」

棒グラフの主役が「棒の高さ=量」であるのに対し、 折れ線グラフの主役は 線分の傾き=時間あたりの変化 である。 読者の目はまず点の高さではなく「上がっているか・下がっているか・どれくらい急か」を先に読む。 だからこそ折れ線では、 傾きの見え方を左右する縦軸スケールと縦横比が量そのものより強く印象を支配する。 SSDSE-B-2026 の東京都・総人口(A1101)は 2012 年 13,234,000 人 → 2023 年 14,086,000 人、 12 年で +852,000 人(+6.44%、 CAGR +0.569%/年)。 「じわじわ増えて、 2020→2021 でコロナ禍により初めて 37,594 人(−0.268%)減り、 その後回復」── この物語は棒グラフより折れ線で一目瞭然になる。

⚠️ 落とし穴(重要)— Y 軸切り詰めが作る「見かけの傾き」を実データで数える

折れ線最大の罠は 縦軸下限のゼロ切り詰め(truncation)。 傾きは「縦の変化 ÷ 縦軸の表示幅」で決まるため、 表示幅を狭めれば同じデータでも線をいくらでも急にできる。 これを Tufte の 嘘の係数(lie factor)で数値化すると、 東京都の実データで次のようになる(すべて SSDSE-B-2026 実測値、 変化量は固定の +852,000 人)。

縦軸の取り方 変化が占める画面高 見かけの誇張 ───────────────────────────────────────────────────────── ゼロ起点 [0, 14,086,000] 852,000/14,086,000 = 6.05% 1.0 倍(正直) 最小-最大 [13,234,000, 14,086,000] 852,000/ 852,000 = 100.0% 16.5 倍 窓 [13,200,000, 14,100,000] 852,000/ 900,000 = 94.7% 15.7 倍

📤 読み: 軸を実測の最小-最大にピタリと詰めるだけで、 わずか 6% の増加が画面いっぱい(100%)に化け、 傾きの印象は約 16 倍に誇張される。 データは 1 バイトも変えていない。 折れ線を疑うときは値ではなく まず縦軸の下限と表示幅を見る。 なお棒グラフはゼロ切り詰めが原則ダメだが、 折れ線は「変化の判別」が目的なら切り詰め自体は許容される場面もある。 肝心なのは 切り詰めを隠さず、 目盛と下限を明示すること

▼ 触って確かめる(実データ・東京都総人口): 下の枠を上下にドラッグ/タップすると Y 軸の下限が動き、 誇張率がその場で計算される。

(読み込み中…)

▼ 架空データでの実演: 「切り詰めは傾向のないデータからも偽のトレンドを作る」ことを、 シード付き擬似乱数で生成した架空のほぼ横ばい系列で示す。 左右は同一データ、 軸だけが違う。

(読み込み中…)

🚀 発展 — 傾きを「正しく」見せる縦横比(banking to 45°)

縦軸を固定しても、 図の縦横比(アスペクト比)でも傾きの印象は変わる。 横に長い図は全ての傾きを寝かせ、 縦に長い図は立たせる。 Cleveland の banking to 45° は「連続する線分の傾きの中央値が概ね 45°になるよう縦横比を選ぶと、 傾きの変化を人間が最も精確に読める」という経験則。 東京都総人口のように単調でなだらかな系列では、 横長にすると 2020→2021 の減少という重要な転換点が潰れて見える。 指数化(基準年=100)や前年差分(Δ)の折れ線に描き替えれば、 絶対値の桁に埋もれた「変化の変化」=加速・減速が可視化できる。 東京都なら 2012→2019 は毎年 +7〜12 万人ペースの安定成長、 2020 で +40,594 人に急減速、 2021 で初のマイナス── 差分折れ線にすると転換が明瞭になる。

🔗 関連ページ