軸とグラフを読む|表・単位・割合・グラフ

このページはプロモーション(広告)を含みます。

表・単位・割合・グラフ(初級・読む22分+演習28分)

この授業のゴール

仕事でどう使うか

グラフは、短時間で多くの人に結論を伝える道具です。そのぶん、軸の取り方ひとつで印象が大きく変わります。作る側は誤解させない責任があり、読む側は見抜く責任があります。

路線 この授業の使いどころ
DS(データサイエンティスト) 分析結果のグラフに、単位・期間・対象・分母を書く。軸の起点を明示し、差が小さいときは数値も併記する
ML(機械学習エンジニア) モデルの精度の比較グラフで、軸を切って差を大きく見せない。学習曲線や評価指標の軸を正しく読む
DX(DX推進・AI企画) 経営会議用のダッシュボードで、累計と月次を取り違えない。現場の指標を誤解されないグラフで示す
RS(研究者) 論文の図の軸・誤差の表し方を読む。軸を切った図に、見た目ほどの差がないことを見抜く

この授業の目的は、グラフを見て最初に目盛りを確かめる習慣を作ることです。

前提

この授業は、割合・平均・単位の考え方を前提にします。

グラフの描画コードは、読めれば十分です。画面内のPythonで実際に描いて確かめます。

身近な状況:ほとんど同じ購入率が「2倍以上」に見える

ある店の、施策の前と後の購入率は次のとおりです(購入率 = 購入者数 ÷ 来店者数)。

期間 購入率
施策前 20.0%
施策後 20.8%

差は 0.8 パーセントポイントです。相対増加率は 0.8 ÷ 20.0 = 4% で、ささやかな改善です。

ところが、この2つを棒グラフにして、縦軸を 19.5%から 始めると、施策前の棒の長さは 20.0 − 19.5 = 0.5、施策後は 20.8 − 19.5 = 1.3 になります。見た目の比は 1.3 ÷ 0.5 = 2.6倍です。実際の比は 20.8 ÷ 20.0 = 1.04倍にすぎません。

人の目は、棒の長さを値の大きさとして受け取ります。軸が途中から始まっていると、長さの比が値の比と一致しなくなり、小さな差が大きく見えます。

この授業では、グラフを読むときの確認手順と、よくある誤解のパターンを数値で確かめます。

直感的な説明:グラフは「目盛り」を読んでから形を見る

グラフを見たとき、人はまず形(右肩上がり、急な下落)に目が行きます。しかし、形は軸の取り方で変わります。そこで、形を見る前に軸を読む習慣をつけます。

グラフを読む確認手順(チェックリスト)は次の6つです。

  1. 何のグラフか:題名と、縦軸・横軸の名前。
  2. 単位:円、千円、人、%、件。
  3. 期間:日、月、年。累計か、その期間だけの値か。
  4. 対象:全社か、1店舗か。人数と件数のどちらか。
  5. 起点と目盛り:縦軸は0から始まっているか。目盛りの間隔は等しいか。
  6. 分母:割合なら、何を何で割ったか。

棒グラフの棒の長さは「0からの距離」を表します。だから棒グラフの縦軸は0から始めるのが原則です。折れ線グラフは、点の位置と傾きで変化を見るので、軸を途中から始めることもありますが、その場合は目盛りを明記します。

最後に、グラフは結論の証拠であって、結論そのものではありません。グラフで差が大きく見えても、数値で差が小さければ、数値を信じます。

正確な定義:軸・起点・見た目の比・累計

用語を定義します。

起点が $b$ の棒グラフで、2つの値 $v_1, v_2$ を描くとき、棒の長さは $v_1 - b$ と $v_2 - b$ になります。見た目の比は次の式です。

$$\text{見た目の比} = \frac{v_2 - b}{v_1 - b}$$

ここで $v_1, v_2$ は描く値(購入率%など)、$b$ は軸の起点(同じ単位)です。冒頭の例は $v_1=20.0$、$v_2=20.8$、$b=19.5$ で、$(20.8-19.5)/(20.0-19.5) = 1.3/0.5 = 2.6$ です。$b=0$ なら $20.8/20.0 = 1.04$ で、値の比と一致します。

累計(累積)は、これまでの値を足し合わせたものです。

$$C_t = x_1 + x_2 + \cdots + x_t$$

$x_t$ は $t$ 期の値(その期間だけの売上など)、$C_t$ は $t$ 期までの累計です。累計のグラフは、値が0以上なら下がることがなく、右上がり(値が0の期は横ばい)になります。ある期の値 $x_t$ は、累計の差 $C_t - C_{t-1}$ から求められます。累計が上がり続けていても、各期の値は減っていることがあります。

二軸グラフは、左右に別の目盛りを持つグラフです。目盛りの範囲を自由に調整できるため、2つの線の交差や重なりが偶然の見せかけになりえます。

グラフの種類の目安:

伝えたいこと 向いているグラフ
項目どうしの大きさの比較 棒グラフ(起点0)
時間の変化 折れ線グラフ
全体に占める内訳 積み上げ棒、帯グラフ
2つの量の関係 散布図

段階付き例題:軸を切った棒グラフの見た目の比を計算する

問題:購入者数が、先月52人、今月55人だった。縦軸が50から始まる棒グラフでは、見た目の比と実際の比はそれぞれいくつか。

ステップ1:実際の変化を求める。55 ÷ 52 = 1.0577...倍。増加率は (55−52) ÷ 52 = 5.77%。

ステップ2:起点を確認する。軸の起点は $b=50$。

ステップ3:棒の長さを求める。先月は 52 − 50 = 2、今月は 55 − 50 = 5。

ステップ4:見た目の比を求める。5 ÷ 2 = 2.5倍。見た目の増加は150%。

ステップ5:起点を0にする。長さは 52 と 55 で、比は 1.058倍。

画面で2つのグラフを並べて描きます。plt.subplots(1, 2) は、1行2列の図を作る関数で、図 fig と2つの座標領域 axes を返します。ax.bar は棒グラフを描き、ax.set_ylim(下限, 上限) は縦軸の範囲を決めます。

import matplotlib.pyplot as plt
labels = ['Last month', 'This month']
values = [52, 55]
fig, axes = plt.subplots(1, 2, figsize=(7, 3))
axes[0].bar(labels, values)
axes[0].set_ylim(50, 56)
axes[0].set_title('Axis starts at 50')
axes[1].bar(labels, values)
axes[1].set_ylim(0, 60)
axes[1].set_title('Axis starts at 0')
fig.tight_layout()
print('実際の比', round(55 / 52, 3))
print('見た目の比(起点50)', (55 - 50) / (52 - 50))

出力は、実際の比 1.058、見た目の比(起点50)2.5です。左の図は、今月の棒が先月の2.5倍に見えます。右の図は、ほぼ同じ高さに見えます。

ステップ6:結果を読む。購入者数は約5.8%の増加で、2.5倍の増加ではありません。報告では、数値と増加率を書き、グラフは起点0で描き直します。

操作して理解する:起点を動かす、累計を差に戻す

まず、起点 $b$ を変えたときの、見た目の比を計算します。関数 visual_ratio(v1, v2, base) は、2つの値と起点を受け取り、見た目の比(小数)を返します。

def visual_ratio(v1, v2, base):
    return (v2 - base) / (v1 - base)

for base in [0, 40, 50, 51]:
    print('起点', base, '見た目の比', round(visual_ratio(52, 55, base), 3))

出力は、起点0が1.058、起点40が1.25、起点50が2.5、起点51が4.0です。起点を値に近づけるほど、見た目の比は大きくなります。起点が51なら、52の棒は長さ1、55の棒は長さ4で、4倍に見えます。

次に、累計のグラフから各月の値に戻します。累計の売上(万円)が、1月から4月まで 100, 220, 330, 410 のとき、各月の売上は前月との差です。

cum = [100, 220, 330, 410]
monthly = [cum[0]] + [cum[i] - cum[i - 1] for i in range(1, len(cum))]
print('累計', cum)
print('各月', monthly)

出力は、各月 [100, 120, 110, 80] です。累計は右肩上がりですが、売上は2月をピークに、3月、4月と減っています。

試してください。visual_ratio(52, 55, 45) を計算すると、(55−45) ÷ (52−45) = 10 ÷ 7 ≒ 1.43 です。起点をいくつにすると、見た目の比がちょうど2になるか、考えてみましょう(答え:$(55-b)=2(52-b)$ より $b=49$)。

発展:折れ線の軸・対数軸・二軸グラフ

折れ線グラフの軸の切断:折れ線は、点の高さと傾きで変化を読みます。体温や株価のように、狭い範囲で動く値は、軸を途中から始めないと変化が見えません。この場合は、(1) 軸の範囲を目盛りで明示する、(2) 軸が切れていることを注記する、(3) 変化率の数値も併記する、の3点を行います。軸の切断が悪いのではなく、隠すことが問題です。

対数軸:縦軸の間隔を、値の差ではなく比で取る軸です。10、100、1000が等間隔になります。成長率が一定なら直線になるため、倍々に増えるデータの比較に便利です。ただし、慣れない読み手には誤解されやすいので、目盛りを明記します。

二軸グラフ:左軸が売上(万円)、右軸が気温(℃)のように、単位の違う2つの線を重ねるものです。左右の範囲を調整すると、線の交差や並行が作れます。2本の線が似た動きに見えても、相関があることも、因果があることも意味しません。単位の違う量は、別々のグラフに分けるのが安全です。

面積と体積の錯覚:棒の代わりに円の大きさや立体で量を表すと、半径を2倍にすると面積は4倍に見えます。値の2倍を半径の2倍で表すと、見た目は4倍になります。量の比較には、長さ(棒)を使うのが誤解を生みません。

グラフの設計の詳細は、可視化の授業で扱います。この授業では、目盛りを読み、起点と累計に注意することを確実にしてください。

よくある失敗

失敗1:棒グラフの軸を途中から始める

誤った例:購入率20.0%と20.8%を、縦軸19.5%から始まる棒グラフにする。

v1, v2 = 20.0, 20.8
base = 19.5
print('見た目の比(起点19.5)', round((v2 - base) / (v1 - base), 2))
print('実際の比', round(v2 / v1, 2))
print('実際の変化(pp)', round(v2 - v1, 1))

見た目の比は2.6、実際の比は1.04です。0.8ポイントの差が、2.6倍に見えます。直し方:棒グラフの縦軸は0から始める。差が小さいことを伝えたいなら、値のラベルを棒の上に書く。

失敗2:累計グラフの右肩上がりを「好調」と読む

誤った例:累計売上が毎月増えているので、「毎月売上が伸びている」と報告する。

cum = [100, 220, 330, 410]
monthly = [cum[0]] + [cum[i] - cum[i - 1] for i in range(1, 4)]
print('各月の売上', monthly)
print('4月の前月比(%)', round((monthly[3] / monthly[2] - 1) * 100, 1))

各月の売上は [100, 120, 110, 80] で、4月は前月より約27.3%の減少です。累計は、売上が0以上である限り下がることがないため、月ごとの勢いを表しません。直し方:変化を伝えたいときは、期間ごとの値(月次)のグラフにする。累計は「ここまでの総量」を示す目的に限る。

失敗3:購入者数の棒グラフで、店舗の良し悪しを比べる

誤った例:A店の購入者8人、B店の購入者20人の棒グラフを見て、「B店の方が成績が良い」と判断する。

stores = {'A': (8, 40), 'B': (20, 200)}
for name, (buyers, visitors) in stores.items():
    print(name, '購入者', buyers, '来店者', visitors, '購入率', round(buyers / visitors, 3))

購入者数はB店が多いのですが、来店者数が5倍いるため、購入率はA店20%、B店10%です。人数(件数)のグラフは、規模の違いを含んでいます。直し方:店を比べるときは、分母をそろえた割合(購入率)のグラフにする。件数のグラフと割合のグラフを、目的で使い分ける。

まとめ

用語

軸の切断(truncated axis)

軸の起点を0以外から始めること。棒グラフでは差が誇張される。

累計(累積)(cumulative)

これまでの値を足し合わせた量。値が0以上なら必ず増加または横ばいになる。

二軸グラフ(dual-axis chart)

左右に別々の目盛りを持つグラフ。目盛りの調整で見た目の関係を作れる。

起点(ベースライン)(baseline)

軸の最初の値。棒の長さはこの起点からの距離で決まる。

よくある質問

なぜ棒グラフは0から始めるのですか。

棒の長さが値の大きさを表すからです。起点が0でないと、長さの比が値の比と一致せず、小さな差が大きく見えます。値の近くで比べたいなら、棒でなく折れ線や点で示します。

差が小さいことを、グラフでどう伝えればよいですか。

起点0の棒グラフに、値のラベルを付けます。差が小さいことが見た目でもわかるようにして、さらに増減率やパーセントポイントを文章で書きます。

累計のグラフはいつ使うのですか。

目標に対する進み具合や、ここまでの総量を示すときです。たとえば年間の売上目標に対する累計は、進捗の確認に向いています。月ごとの勢いを見るときは、月次のグラフにします。

他人が作ったグラフが誤解を招くか、どう見抜きますか。

軸の起点、目盛りの間隔、期間、単位、分母を順に確認します。次に、グラフの値を読み取って自分で増減率を計算し、見た目の印象と比べます。

円グラフは使ってはいけませんか。

内訳が少数(目安は5項目程度)で、合計が100%と明らかな場合には使えます。項目が多い場合や、項目どうしの大きさを比べたい場合は、棒グラフの方が読み取りやすくなります。

条件が変わって、軸の起点を0にできない場合は?

たとえば体温や為替のように、0に意味がない量は、起点を0にすると変化が見えません。その場合は、折れ線で表し、軸の範囲を明記します。棒グラフでなく折れ線を選ぶこと自体が、誤解を避ける設計の1つです。

確認問題

問1 棒グラフの縦軸が50から始まり、先月52、今月55の棒を描いた。見た目の比(今月÷先月)はいくつか。

  1. ① 約1.06倍
  2. ② 2.5倍
  3. ③ 1.1倍
  4. ④ 0.95倍
解答と解説

正解:②

棒の長さは起点からの距離で、2と5。見た目の比は5÷2=2.5倍です。実際の比は約1.06倍です。

問2 累計売上のグラフが右肩上がりの月でも、起こりえることはどれか。

  1. ① 累計は途中で必ず下がる
  2. ② 売上が0円の月はありえない
  3. ③ 各月の売上は必ず前月より増えている
  4. ④ 各月の売上が前月より減っている月がありうる
解答と解説

正解:④

売上が0以上なら累計は下がらない(売上が正の月は必ず増える)ため、各月の売上が減っていても右肩上がりは保たれます。

問3 A店の購入者数が8人、B店が20人の棒グラフを見て、B店の方が優れていると判断する前に確認すべきことはどれか。

  1. ① 来店者数などの分母と、購入率
  2. ② グラフのタイトルの文字の大きさ
  3. ③ 棒の本数
  4. ④ 棒の色
解答と解説

正解:①

人数のグラフは店の規模を含みます。優劣は、分母をそろえた購入率で比べます。

問4 折れ線グラフの縦軸を途中から始めて描くことについて、正しい説明はどれか。

  1. ① 切断すると値が変わる
  2. ② 絶対に許されない
  3. ③ 目盛りや切断を明示し、変化率の数値も併記すれば許容されることがある
  4. ④ 棒グラフでも同じ理由で常に許される
解答と解説

正解:③

折れ線は点の高さと傾きで読むので、狭い範囲の変化を見せるために軸を切ることがあります。ただし、切断を明示することが条件です。

問5 二軸グラフ(左軸は売上、右軸は気温)で、2本の線が似た動きをしている。この説明として最も適切なのはどれか。

  1. ① 必ず相関係数が1になる
  2. ② 売上が気温を決めている
  3. ③ 売上と気温の間に因果関係がある
  4. ④ 左右の軸の範囲を調整すれば似て見えるので、これだけでは関係を示したことにならない
解答と解説

正解:④

二軸は目盛りの範囲を自由に変えられるので、見た目の類似は、関係の証拠になりません。

問6 グラフを読むときの最初の確認として、最も適切なのはどれか。

  1. ① 線の形が右肩上がりかどうか
  2. ② 軸の名前・単位・起点・期間・対象
  3. ③ 色の組み合わせ
  4. ④ グラフの大きさ
解答と解説

正解:②

形は軸の取り方で変わるため、先に軸・単位・期間・対象を確かめます。

次に学ぶこと

これで ON04 の6授業が終わりです。総合テストと自力課題で、「来店数・購入数・売上から率と単価を計算し、誤ったグラフを修正する」ことを確認します。

学習を進めるときは、次の分野につなげます。割合と平均を統計的に扱う 記述統計と標本、SQLで率を出す 「分母をそろえた率」(有料版)、Pythonで表を扱う Pythonの最初の1行 です。算数の基礎に不安があれば 算数から数式への橋渡し に戻ってください。

この授業の確認問題だけで習得とはしません。

キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。

アプリを無料で開く有料版と無料版の違い