STEP 35:誤解を招くグラフの回避

⚠️ STEP 35: 誤解を招くグラフの回避

悪意がなくても誤解を招く可視化を避け、正確な情報伝達を実現しよう!

📋 このステップで学ぶこと

  • 誤解を招くグラフの典型例と影響
  • 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: 他社のグラフが誤解を招いている場合、どうすべきですか?
自社のグラフでは正確さを保ちましょう。他社のグラフを批判するよりも、自社のグラフを正確に作成することが重要です。もし比較する場合は、「同じスケールで再作成すると…」と正確なグラフを並べて見せるのが効果的です。
📝

学習メモ

データ可視化マスター - Step 35

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE