📋 このステップで学ぶこと
- 誤解を招くグラフの典型例と影響
- Y軸を0から始めない問題
- 3D円グラフの問題点
- 面積と数値の不一致
- チェリーピッキング(都合の良いデータのみ表示)
- 正しい可視化への修正方法
⚠️ 1. 誤解を招くグラフとは
なぜこのテーマが重要なのか
データ可視化は、複雑な情報をわかりやすく伝える強力なツールです。しかし、その力は誤解を広めるためにも使われてしまうことがあります。
誤解を招くグラフ(Misleading Charts)とは、データを正確に表現せず、見る人に間違った印象を与えるグラフのことです。これは意図的に行われる場合もあれば、知識不足によって非意図的に発生する場合もあります。
誤解を招くグラフの影響
誤解を招くグラフは、ビジネスや社会に深刻な影響を与えます。
⚠️ 誤解を招くグラフがもたらす問題
| 問題 |
具体的な影響 |
実例 |
| 意思決定の誤り |
間違ったデータに基づいて判断してしまう |
売上が急増したように見えて追加投資 → 実は微増だった |
| 信頼の喪失 |
「このグラフは信用できない」と思われる |
一度嘘を見抜かれると、以降のレポートも疑われる |
| 倫理的問題 |
意図的な誤誘導は詐欺に近い |
投資詐欺で使われる誇張されたリターングラフ |
| ブランド毀損 |
専門性や誠実さへの疑問 |
メディアで「印象操作」と批判される |
よくある誤解を招く手法
誤解を招くグラフには、いくつかの典型的なパターンがあります。これらを知っておくことで、自分が作るグラフで同じ間違いを避けられます。
⚠️ 誤解を招く5つの典型的な手法
| 手法 |
何が起きるか |
見分け方 |
| Y軸操作 |
0から始めないことで、小さな差が大きく見える |
Y軸の開始点を確認する |
| 3D効果 |
遠近感で値が歪んで見える |
円グラフが立体的になっていないか確認 |
| 面積の誤用 |
2倍のデータが4倍の面積で表現される |
円やアイコンのサイズを疑う |
| 時間軸の歪曲 |
不均等な時間間隔で変化率を誤認 |
X軸の間隔が均等か確認 |
| チェリーピッキング |
都合の良いデータだけが選ばれる |
全期間のデータが表示されているか確認 |
💡 正しいグラフの4つの原則
- 正確性:データを正確に表現する(歪めない、誇張しない)
- 誠実性:意図的な誤誘導をしない(嘘をつかない)
- 透明性:データソースと条件を明記する(隠さない)
- 文脈:十分な背景情報を提供する(切り取らない)
📊 2. Y軸を0から始めない問題
最も一般的な誤り
Y軸を0から始めないことは、誤解を招くグラフの中で最も一般的な手法です。小さな変化が大きく見え、実際よりも劇的な印象を与えます。
例えば、売上が98万円から103万円に増加した場合(約5%増)、Y軸を0から始めれば「ほぼ横ばい」に見えますが、Y軸を95から始めると「急増」に見えてしまいます。
【Y軸操作の問題を図解】
【悪い例: Y軸が95から開始】
売上推移(Y軸: 95-105)
↑
105 │ ╱╲
│ ╱ ╲
101 │ ╱ ╲
│ ╱ ╲
98 │ ╱ ╲
│ ● ●
95 └──────────────→
1月 2月 3月 4月
→ 売上が2倍に急増したように見える!
→ 実際は5%の変化
【良い例: Y軸が0から開始】
売上推移(Y軸: 0-120)
↑
120 │
│
100 │ ●━━●━━●━━● ← ほぼ横ばい
│
50 │
│
0 └──────────────→
1月 2月 3月 4月
→ 実際はわずか5%の変化であることが明確
悪い例と良い例の比較(Python)
実際にPythonで2つのグラフを作成し、印象の違いを確認してみましょう。
# ステップ1: ライブラリをインポート
import matplotlib.pyplot as plt
import numpy as np
# ステップ2: データを準備
月 = [‘1月’, ‘2月’, ‘3月’, ‘4月’]
売上 = [98, 101, 99, 103] # 実際はわずかな変化
# ステップ3: 2つのグラフを並べて作成
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# ========== 悪い例: Y軸を95から開始 ==========
ax1.plot(月, 売上, marker=’o’, linewidth=3, markersize=10, color=’red’)
ax1.set_ylim(95, 105) # Y軸を95から開始(問題!)
ax1.set_title(‘❌ 悪い例: Y軸が95から開始’, fontsize=16, fontweight=’bold’, color=’red’)
ax1.set_ylabel(‘売上(万円)’, fontsize=12)
ax1.grid(True, alpha=0.3)
# 注釈を追加
ax1.annotate(‘急増に見える!’, xy=(3, 103), xytext=(2.5, 104),
arrowprops=dict(arrowstyle=’->’, color=’red’, lw=2),
fontsize=12, color=’red’, fontweight=’bold’)
# ========== 良い例: Y軸を0から開始 ==========
ax2.plot(月, 売上, marker=’o’, linewidth=3, markersize=10, color=’green’)
ax2.set_ylim(0, 120) # Y軸を0から開始(正しい)
ax2.set_title(‘✓ 良い例: Y軸が0から開始’, fontsize=16, fontweight=’bold’, color=’green’)
ax2.set_ylabel(‘売上(万円)’, fontsize=12)
ax2.grid(True, alpha=0.3)
# 注釈を追加
ax2.annotate(‘実際はわずかな変化’, xy=(3, 103), xytext=(2, 80),
arrowprops=dict(arrowstyle=’->’, color=’green’, lw=2),
fontsize=12, color=’green’, fontweight=’bold’)
# ステップ4: レイアウトを調整して表示
plt.tight_layout()
plt.show()
💡 コードの各行の解説
| コード |
何をしているか |
なぜ重要か |
plt.subplots(1, 2) |
1行2列のグラフを作成 |
悪い例と良い例を並べて比較できる |
ax1.set_ylim(95, 105) |
Y軸の範囲を95〜105に設定 |
これが「誤解を招く」原因 |
ax2.set_ylim(0, 120) |
Y軸の範囲を0〜120に設定 |
0から始めることで正確な印象を与える |
ax.annotate() |
注釈(矢印付きテキスト)を追加 |
問題点や正しい解釈を明示できる |
例外: Y軸を0から始めなくても良い場合
すべてのグラフでY軸を0から始める必要はありません。0が特別な意味を持たない場合や、微小な変化を検出したい場合は例外となります。
💡 Y軸を0から始めなくても良いケース
| ケース |
理由 |
注意点 |
| 温度データ |
マイナスの値があり、0が特別な意味を持たない |
摂氏0度は「なし」を意味しない |
| 株価データ |
0になることはなく、変化率が重要 |
「Y軸は0から始まっていません」と明記 |
| 微小な変化の検出 |
0から始めると変化が全く見えない |
必ず明記し、読者を誤解させない |
重要:例外の場合でも、「Y軸は0から始まっていません」とグラフに明記することで、読者の誤解を防げます。
🎨 3. 3D円グラフの問題
なぜ3D円グラフは避けるべきか
3D円グラフは見た目が華やかですが、データ可視化の観点からは最も避けるべきグラフの1つです。遠近感によって、同じ割合でも位置によって大きさが違って見えてしまいます。
【3D円グラフの問題点を図解】
【すべて25%のデータを3D円グラフで表示すると…】
┌─────────────────┐
╱ ╲
╱ 手前が大きく ╲
│ 見える! │
│ │
╲ 奥が小さく ╱
╲ 見える! ╱
└─────────────────┘
【問題点まとめ】
┌────────────────┬────────────────────────────────┐
│ 問題1 │ 遠近感による歪み │
│ │ → 手前の25%が奥の25%より大きく見える │
├────────────────┼────────────────────────────────┤
│ 問題2 │ 角度による錯覚 │
│ │ → 同じ25%でも位置で見え方が違う │
├────────────────┼────────────────────────────────┤
│ 問題3 │ 比較が困難 │
│ │ → 正確な割合を読み取れない │
├────────────────┼────────────────────────────────┤
│ 問題4 │ 不要な装飾 │
│ │ → 情報を増やさず、理解を妨げる │
└────────────────┴────────────────────────────────┘
悪い例と良い例の比較(Python)
3D風の円グラフと2D円グラフを比較してみましょう。
# ライブラリをインポート
import matplotlib.pyplot as plt
# データ(すべて同じ割合)
カテゴリ = [‘商品A’, ‘商品B’, ‘商品C’, ‘商品D’]
売上 = [25, 25, 25, 25] # すべて25%
色 = [‘#FF6B6B’, ‘#4ECDC4’, ‘#45B7D1’, ‘#FFA07A’]
# 2つのグラフを並べて作成
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
# ========== 悪い例: 3D風円グラフ ==========
wedges, texts, autotexts = ax1.pie(
売上,
labels=カテゴリ,
autopct=’%1.1f%%’, # パーセント表示
startangle=45, # 開始角度
colors=色,
shadow=True, # 影を追加(3D風に見せる)
explode=(0.05, 0, 0, 0) # 手前を少し離す
)
ax1.set_title(‘❌ 悪い例: 3D風円グラフ\n(すべて25%なのに大きさが違って見える)’,
fontsize=14, fontweight=’bold’, color=’red’)
# ========== 良い例: 2D円グラフ ==========
wedges, texts, autotexts = ax2.pie(
売上,
labels=カテゴリ,
autopct=’%1.1f%%’,
startangle=90, # 12時の位置から開始
colors=色
# shadow=False(デフォルト)
)
ax2.set_title(‘✓ 良い例: 2D円グラフ\n(すべて25%であることが明確)’,
fontsize=14, fontweight=’bold’, color=’green’)
# パーセント表示のスタイル調整
for autotext in autotexts:
autotext.set_color(‘white’)
autotext.set_fontsize(12)
autotext.set_fontweight(‘bold’)
plt.tight_layout()
plt.show()
さらに良い代替案: 棒グラフ
円グラフよりも、棒グラフの方が正確な比較が可能です。特に5つ以上のカテゴリがある場合は、棒グラフを使いましょう。
# ライブラリをインポート
import plotly.graph_objects as go
# データ
カテゴリ = [‘商品A’, ‘商品B’, ‘商品C’, ‘商品D’]
売上 = [150, 120, 100, 80]
割合 = [33.3, 26.7, 22.2, 17.8]
# 棒グラフを作成
fig = go.Figure()
fig.add_trace(go.Bar(
x=カテゴリ,
y=売上,
# 棒の上にラベルを表示
text=[f'{売上[i]}万円
({割合[i]}%)’ for i in range(len(カテゴリ))],
textposition=’outside’,
marker=dict(
color=[‘#FF6B6B’, ‘#4ECDC4’, ‘#45B7D1’, ‘#FFA07A’],
line=dict(width=2, color=’white’)
)
))
fig.update_layout(
title=’✓ 最良の例: 棒グラフ(正確な比較が可能)’,
xaxis_title=’商品’,
yaxis_title=’売上(万円)’,
height=500,
showlegend=False
)
fig.show()
💡 円グラフ vs 棒グラフ どちらを使うべき?
| 条件 |
推奨グラフ |
理由 |
| カテゴリが3つ以下 |
2D円グラフ |
「全体の一部」という感覚が伝わりやすい |
| カテゴリが4つ以上 |
棒グラフ |
比較が容易 |
| 正確な比較が必要 |
棒グラフ |
長さの比較は面積より正確 |
| 割合が近い値が多い |
棒グラフ |
円グラフでは差が見えにくい |
📐 4. 面積と数値の不一致
面積の2乗問題
バブルチャートやアイコン表現で起きやすい問題です。数値が2倍のとき、直径を2倍にすると、面積は4倍になってしまいます。
これは、円の面積が「π × 半径²」で計算されるためです。正しくは、面積を2倍にする必要があります(半径は√2倍 ≈ 1.41倍)。
【面積の誤用問題を図解】
【悪い例: 直径を数値に比例させた場合】
A社: 100万円 B社: 200万円
● ●●●●
(直径10) (直径20)
(面積100) (面積400) ← 4倍に見える!
→ 実際は2倍なのに、4倍に見えてしまう
【良い例: 面積を数値に比例させた場合】
A社: 100万円 B社: 200万円
● ●●
(面積100) (面積200)
→ 正確に2倍の大きさ
【計算方法】
┌─────────────────────────────────────────┐
│ 円の面積 = π × 半径² │
│ │
│ 数値が2倍 → 半径は √2 倍(約1.41倍) │
│ → 面積が2倍になる │
│ │
│ 数値が3倍 → 半径は √3 倍(約1.73倍) │
│ → 面積が3倍になる │
└─────────────────────────────────────────┘
正しい面積の計算(Python)
Matplotlibで正しいバブルチャートを作成する方法を学びましょう。
# ライブラリをインポート
import matplotlib.pyplot as plt
import numpy as np
# データ
企業 = [‘A社’, ‘B社’, ‘C社’]
売上 = [100, 200, 300]
# 2つのグラフを並べて作成
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
# ========== 悪い例: 直径を売上に比例させる ==========
for i, (name, value) in enumerate(zip(企業, 売上)):
# 直径が売上に比例 → 面積は2乗になる(間違い!)
radius = value / 50
circle = plt.Circle((i, 0), radius, color=’red’, alpha=0.6)
ax1.add_patch(circle)
ax1.text(i, -5, f'{name}\n{value}万円’, ha=’center’, fontsize=12)
ax1.set_xlim(-1, 3)
ax1.set_ylim(-7, 7)
ax1.set_aspect(‘equal’)
ax1.axis(‘off’)
ax1.set_title(‘❌ 悪い例: 直径を売上に比例\n(C社が実際より大きく見える)’,
fontsize=14, fontweight=’bold’, color=’red’)
# ========== 良い例: 面積を売上に比例させる ==========
for i, (name, value) in enumerate(zip(企業, 売上)):
# 面積を売上に比例させるため、半径は√売上に比例(正しい!)
radius = np.sqrt(value) / 5
circle = plt.Circle((i, 0), radius, color=’green’, alpha=0.6)
ax2.add_patch(circle)
ax2.text(i, -5, f'{name}\n{value}万円’, ha=’center’, fontsize=12)
ax2.set_xlim(-1, 3)
ax2.set_ylim(-7, 7)
ax2.set_aspect(‘equal’)
ax2.axis(‘off’)
ax2.set_title(‘✓ 良い例: 面積を売上に比例\n(正確な比率)’,
fontsize=14, fontweight=’bold’, color=’green’)
plt.tight_layout()
plt.show()
Plotlyでの正しいバブルチャート
Plotlyのpx.scatter()は、sizeパラメータで自動的に面積を値に比例させてくれます。特別な計算は不要です。
# ライブラリをインポート
import plotly.express as px
import pandas as pd
# データをDataFrameで準備
df = pd.DataFrame({
‘企業’: [‘A社’, ‘B社’, ‘C社’, ‘D社’],
‘売上’: [100, 200, 300, 400],
‘x’: [1, 2, 3, 4],
‘y’: [1, 1, 1, 1]
})
# Plotlyのscatter(バブルチャート)を作成
# sizeパラメータで自動的に面積が売上に比例する
fig = px.scatter(
df,
x=’x’,
y=’y’,
size=’売上’, # 面積が自動的に売上に比例
text=’企業’,
size_max=80, # 最大の円のサイズ
color=’企業’,
title=’✓ 正しいバブルチャート(面積が売上に比例)’
)
# テキストを円の中央に配置
fig.update_traces(
textposition=’middle center’,
textfont_size=14
)
# レイアウトを調整
fig.update_layout(
showlegend=False,
xaxis=dict(visible=False),
yaxis=dict(visible=False),
height=400
)
fig.show()
💡 Plotlyを使うメリット
Plotlyのpx.scatter()は、sizeパラメータを指定するだけで自動的に面積を値に比例させてくれます。自分で√を計算する必要がなく、正しいバブルチャートを簡単に作成できます。
🍒 5. チェリーピッキング
都合の良いデータだけを選ぶ問題
チェリーピッキング(Cherry Picking)とは、サクランボを収穫するときに良いものだけを選ぶように、都合の良いデータだけを選んで表示することです。
例えば、10年間のデータがあるのに、上昇トレンドの2年間だけを見せて「急成長中!」と主張するケースです。
【チェリーピッキングの例】
【全体データ(2020-2024年)】
売上: 100 → 90 → 95 → 110 → 105
┌─────────────────────────────────────────────┐
│ │
│ 悪い例 │
│ 「売上が15%増加!」 │
│ (2022→2023のみ表示) │
│ │
│ ┌─────────────┐ │
│ │ ●110 │ │
│ │ ╱ │ │
│ │ ●95 │ │
│ └─────────────┘ │
│ 2022 2023 │
│ │
├─────────────────────────────────────────────┤
│ │
│ 良い例 │
│ 「5年間で5%増加、途中で変動あり」 │
│ │
│ ┌─────────────────────────┐ │
│ │ ●110 │ │
│ │ ╱ ╲●105 │ │
│ │ ●100╱ ╲ │ │
│ │ ╲ ●95 │ │
│ │ ●90 │ │
│ └─────────────────────────┘ │
│ 2020 2021 2022 2023 2024 │
│ │
└─────────────────────────────────────────────┘
【他のチェリーピッキング例】
❌ 成功した店舗だけを表示(失敗した店舗を隠す)
❌ 好調だった月だけを表示(不調な月を隠す)
❌ 競合より優れている指標だけを表示(劣っている指標を隠す)
チェリーピッキングの検出と修正(Python)
悪い例と良い例を比較するグラフを作成してみましょう。
# ライブラリをインポート
import matplotlib.pyplot as plt
# 全データ(10年分)
年 = list(range(2015, 2025))
売上 = [100, 95, 90, 92, 95, 98, 110, 105, 108, 112]
# 2つのグラフを並べて作成
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# ========== 悪い例: 都合の良い期間だけ表示 ==========
選択年 = [2019, 2020, 2021]
選択売上 = [98, 110, 105]
ax1.plot(選択年, 選択売上, marker=’o’, linewidth=3, markersize=12, color=’red’)
ax1.set_title(‘❌ 悪い例: 2019-2021年のみ表示\n「売上が12%増加!」’,
fontsize=14, fontweight=’bold’, color=’red’)
ax1.set_ylabel(‘売上(万円)’, fontsize=12)
ax1.set_ylim(90, 115)
ax1.grid(True, alpha=0.3)
# ========== 良い例: 全期間を表示 ==========
ax2.plot(年, 売上, marker=’o’, linewidth=3, markersize=12, color=’green’)
ax2.set_title(‘✓ 良い例: 全期間を表示\n「10年間で12%増加、変動あり」’,
fontsize=14, fontweight=’bold’, color=’green’)
ax2.set_ylabel(‘売上(万円)’, fontsize=12)
ax2.set_ylim(85, 115)
ax2.grid(True, alpha=0.3)
# チェリーピッキングされた期間を黄色で強調
ax2.axvspan(2019, 2021, alpha=0.2, color=’yellow’)
ax2.annotate(‘この期間だけ\n見せると誤解’, xy=(2020, 110), xytext=(2017, 108),
arrowprops=dict(arrowstyle=’->’, color=’orange’, lw=2),
fontsize=10, color=’orange’)
plt.tight_layout()
plt.show()
⚠️ チェリーピッキングを避けるためのルール
- 全期間のデータを表示する:利用可能なすべてのデータを見せる
- 期間を選んだ理由を明記する:「直近3年」など、選択基準を説明
- 都合の悪いデータも含める:成功も失敗も正直に見せる
- 比較は公平に:同じ条件で比較できるデータを使う
🔧 6. その他の誤解を招く手法
時間軸の歪曲
X軸(時間軸)の間隔が不均等だと、変化の速度が正しく伝わりません。
【時間軸が不均等な問題】
【悪い例: 時間間隔が不均等】
2020年 2021年 2023年 2024年
↑ ↑ ↑ ↑
(1年) (1年) (2年!) (1年)
→ 2021-2023年の2年間の変化が、1年間の変化と同じ幅で表示される
→ 変化が緩やかに見えてしまう
【良い例: 均等な時間間隔】
2020年 2021年 2022年 2023年 2024年
↑ ↑ ↑ ↑ ↑
(1年) (1年) (1年) (1年) (1年)
【2022年のデータがない場合の対処法】
✓ 「2022年はデータなし」と明記する
✓ 破線でつなぐ(データが欠損していることを示す)
✓ 空白を設ける(連続していないことを示す)
ダブルY軸の誤用
2つの異なる指標を1つのグラフに表示する「ダブルY軸」は、スケールの操作により誤解を招きやすいです。
【ダブルY軸の問題】
【悪い例: スケールを操作】
売上(左Y軸: 0-100万円) 利益(右Y軸: 0-10万円)
売上 利益
100 ┤ ┤ 10
│ ╱ ╱ │
50 ┤ ╱ vs ╱ ┤ 5
│╱ ╱ │
0 └───────────────────────┘ 0
→ 売上と利益の変化が同じに見える!
→ 実際は利益は売上の10分の1
【解決策】
✓ 2つのグラフに分ける
✓ 同じスケールに統一する
✓ 「スケールが異なります」と明記する
✓ 変化率(%)で比較する
統計的有意性の無視
サンプル数が少なかったり、誤差範囲が大きかったりするデータを、あたかも確実な結論のように見せることも問題です。
📊 統計的有意性の表示
| 表示方法 |
悪い例 |
良い例 |
| 主張 |
「新商品で売上が5%増加!」 |
「新商品で売上が5%増加(95%信頼区間: 3-7%)」 |
| サンプル数 |
記載なし |
「サンプル数: 1,000」 |
| 誤差範囲 |
記載なし |
「誤差範囲: ±2%」 |
| 有意性 |
記載なし |
「統計的に有意(p < 0.05)」 |
✅ 7. 公開前のチェックリスト
誤解を招かないグラフのための10項目チェック
グラフを公開する前に、以下のチェックリストで確認しましょう。すべての項目に「はい」と答えられれば、正確なグラフです。
【公開前のチェックリスト】
□ 1. Y軸は0から始まっているか?
(例外の場合は「0から始まっていません」と明記したか?)
□ 2. 3D効果を使っていないか?
(使っている場合は2Dに変更)
□ 3. 面積は値に正確に比例しているか?
(バブルチャートは特に注意)
□ 4. 全期間のデータを表示しているか?
(チェリーピッキングしていないか?)
□ 5. 時間軸は均等か?
(不均等な場合は明記したか?)
□ 6. データソースを明記したか?
(どこから取得したデータか?)
□ 7. サンプル数や誤差範囲を示したか?
(統計データの場合)
□ 8. 色は誤解を招いていないか?
(赤=悪い、緑=良い などの一般的な意味を守っているか?)
□ 9. タイトルは正確か?
(誇張していないか? 事実を反映しているか?)
□ 10. 注釈や条件を明記したか?
(読者が理解するために必要な情報を提供したか?)
💡 チェックリストの使い方
グラフを作成したら、このチェックリストを上から順に確認しましょう。1つでも「いいえ」があれば、修正してから公開します。
特に重要なのは、1番(Y軸)、4番(全データ表示)、9番(タイトル)です。この3つは最も誤解を招きやすいポイントです。
📝 STEP 35 のまとめ
✅ このステップで学んだこと
| トピック |
問題点 |
解決策 |
| Y軸問題 |
0から始めないと差が誇張される |
Y軸を0から始める(例外は明記) |
| 3D円グラフ |
遠近感で値が歪む |
2D円グラフか棒グラフを使用 |
| 面積の誤用 |
直径を比例させると面積が2乗になる |
面積を値に比例させる(半径は√) |
| チェリーピッキング |
都合の良いデータだけ選択 |
全データを表示する |
| 時間軸 |
不均等な間隔で変化率を誤認 |
均等な間隔で表示(欠損は明記) |
| チェックリスト |
確認せずに公開するとミスが残る |
10項目のチェックリストで確認 |
💡 最重要ポイント
誤解を招くグラフは、意図的でなくても信頼を失います。データ可視化の目的は事実を正確に伝えることであり、印象を操作することではありません。
- Y軸を0から始める(例外は明記)
- 3D効果を避ける
- 全データを表示する
この3つの原則を守るだけで、誤解を招くグラフの大半を防げます。次のステップでは、アクセシビリティとユニバーサルデザインを学びます!
📝 実践演習
演習 1
基礎
Y軸を95から始めたグラフと、0から始めたグラフを作成し、印象の違いを確認してください。
【解答コード】
import matplotlib.pyplot as plt
# データ
月 = [‘1月’, ‘2月’, ‘3月’, ‘4月’]
売上 = [98, 101, 99, 103]
# 2つのグラフを作成
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))
# 悪い例: Y軸95から
ax1.plot(月, 売上, marker=’o’, color=’red’)
ax1.set_ylim(95, 105)
ax1.set_title(‘❌ Y軸: 95-105(急増に見える)’)
ax1.set_ylabel(‘売上(万円)’)
ax1.grid(True, alpha=0.3)
# 良い例: Y軸0から
ax2.plot(月, 売上, marker=’o’, color=’green’)
ax2.set_ylim(0, 120)
ax2.set_title(‘✓ Y軸: 0-120(実際の変化がわかる)’)
ax2.set_ylabel(‘売上(万円)’)
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
ポイント:同じデータでも、Y軸の設定で印象が全く異なります。
演習 2
応用
意図的にチェリーピッキングしたグラフと、全データを表示したグラフを作成してください。
【解答コード】
import matplotlib.pyplot as plt
# 全データ(10年分)
年 = list(range(2015, 2025))
売上 = [100, 95, 90, 92, 95, 98, 110, 105, 108, 112]
# 2つのグラフを作成
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# 悪い例: チェリーピッキング(2019-2020のみ)
ax1.plot([2019, 2020], [98, 110], marker=’o’, color=’red’, linewidth=3)
ax1.set_title(‘❌ 2019-2020のみ表示\n「売上が12%増加!」’, color=’red’)
ax1.set_ylabel(‘売上(万円)’)
ax1.set_ylim(90, 115)
ax1.grid(True, alpha=0.3)
# 良い例: 全期間を表示
ax2.plot(年, 売上, marker=’o’, color=’green’, linewidth=3)
ax2.set_title(‘✓ 全期間を表示\n「10年間で12%増加だが変動あり」’, color=’green’)
ax2.set_ylabel(‘売上(万円)’)
ax2.set_ylim(85, 115)
ax2.grid(True, alpha=0.3)
# チェリーピッキングされた期間を強調
ax2.axvspan(2019, 2020, alpha=0.2, color=’yellow’)
plt.tight_layout()
plt.show()
ポイント:全期間を見ると、途中で90まで下がった時期があり、単純な「増加」とは言えないことがわかります。
演習 3
発展
自分が過去に作ったグラフを1つ選び、チェックリストで評価してください。改善点があれば修正してください。
【評価の例】
【チェック結果】
□ Y軸は0から? → ✗ No(95から開始していた)
→ 修正: 0から開始に変更
□ 3D効果なし? → ✓ Yes(2Dグラフを使用)
□ 面積は値に比例? → 該当なし(棒グラフを使用)
□ 全データ表示? → ✗ No(直近6ヶ月のみ)
→ 修正: 全12ヶ月を表示
□ 時間軸均等? → ✓ Yes(月ごとに均等)
□ データソース明記? → ✗ No(記載なし)
→ 修正: 「出典: 社内販売システム」を追加
□ サンプル数表示? → 該当なし(全数データ)
□ 色は適切? → ✓ Yes(青系で統一)
□ タイトルは正確? → ✗ No(「急成長中!」は誇張)
→ 修正: 「月間売上推移」に変更
□ 注釈を明記? → ✗ No(単位が不明確)
→ 修正: 「単位: 万円」を追加
【改善後】
5項目を修正して再作成
❓ よくある質問
Q1: 株価グラフでY軸を0から始めないのは誤りですか?
いいえ、株価は例外です。株価は0になることがなく、相対的な変化率が重要です。ただし、グラフに「Y軸は0から始まっていません」と明記するか、変化率を併記することで誤解を防ぐことをお勧めします。
Q2: 3D効果は絶対に使ってはいけませんか?
データ可視化では避けるべきです。3D効果は見た目を華やかにしますが、データの正確な理解を妨げます。特に円グラフや棒グラフでは絶対に避けてください。唯一の例外は、3次元のデータ(X, Y, Z)を表現する3D散布図などです。
Q3: 意図的でない誤解も問題になりますか?
はい、結果は同じです。意図的でなくても、誤解を招くグラフは信頼を失います。「知らなかった」は言い訳になりません。このステップで学んだ原則を守り、公開前にチェックリストで確認することが重要です。
Q4: 上司から「もっとインパクトのあるグラフに」と言われたら?
正確さを優先しながら、見せ方を工夫しましょう。Y軸を操作するのではなく、色使いやレイアウト、タイトルの工夫で注目を集められます。また、「このグラフは誤解を招く可能性があります」と説明し、代替案を提案することも大切です。
Q5: 他社のグラフが誤解を招いている場合、どうすべきですか?
自社のグラフでは正確さを保ちましょう。他社のグラフを批判するよりも、自社のグラフを正確に作成することが重要です。もし比較する場合は、「同じスケールで再作成すると…」と正確なグラフを並べて見せるのが効果的です。
artnasekai
#artnasekai #学習メモ