STEP 10:軸の詳細設定とアノテーション

📝 STEP 10: 軸の詳細設定とアノテーション

グラフをもっとわかりやすく!ラベル、タイトル、注釈の追加方法をマスターしよう!

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

  • 軸ラベルの設定(xlabel, ylabel)と重要性
  • タイトルの追加と効果的な書き方
  • 凡例(legend)の配置と設定
  • テキスト注釈(text, annotate)の追加
  • 矢印での強調表現
  • グリッド線の詳細設定

🏷️ 1. 軸ラベルの設定

なぜ軸ラベルが重要なのか

グラフを見たとき、最初に目に入るのはタイトル軸ラベルです。軸ラベルがないグラフは、「この数字は何を表しているの?」という疑問を見る人に与えてしまいます。

例えば、Y軸に「100」「200」「300」という数字があっても、それが「万円」なのか「個」なのか「人」なのかわかりません。軸ラベルは、グラフの「翻訳機」のような役割を果たします。

💡 身近な例で考えてみよう

温度計を想像してください。

軸ラベルがない温度計:数字だけが表示されている → 「20」は何?摂氏?華氏?

軸ラベルがある温度計:「°C」と表示されている → 「20°C」だとすぐわかる!

軸ラベルの基本

Matplotlibでは、xlabel()でX軸(横軸)のラベル、ylabel()でY軸(縦軸)のラベルを設定します。

📊 xlabel()とylabel()の基本構文
関数 役割 基本的な使い方
plt.xlabel() X軸(横軸)にラベルをつける plt.xlabel(‘月’)
plt.ylabel() Y軸(縦軸)にラベルをつける plt.ylabel(‘売上(万円)’)

基本的な軸ラベルの設定

まずは最もシンプルな軸ラベルの設定方法を見てみましょう。以下のコードを1行ずつ解説します。

【コードの構成】 # 1. ライブラリの読み込み import matplotlib.pyplot as plt # 2. データの準備 months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] ← X軸に使うデータ sales = [100, 120, 150, 130, 160, 180] ← Y軸に使うデータ # 3. グラフの作成 plt.figure(figsize=(10, 6)) ← グラフのサイズを指定 plt.plot(months, sales, marker=’o’) ← 折れ線グラフを描画 # 4. 軸ラベルの設定(★今回のポイント) plt.xlabel(‘月’) ← X軸のラベル plt.ylabel(‘売上(万円)’) ← Y軸のラベル # 5. 表示 plt.show()

それでは実際に入力して実行してみましょう。以下のコードをGoogle Colabにコピー&ペーストしてください。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt # データ months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales = [100, 120, 150, 130, 160, 180] plt.figure(figsize=(10, 6)) plt.plot(months, sales, marker=’o’, linewidth=2.5, color=’steelblue’) # 軸ラベルの設定 plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) # タイトル plt.title(‘月別売上推移’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) plt.show()
💡 軸ラベルのベストプラクティス
ポイント 悪い例 良い例 理由
単位を明記 売上 売上(万円) 数字だけでは何を表すかわからない
わかりやすく Rev. 売上 略語は専門家以外にはわかりにくい
フォントサイズ fontsize=8 fontsize=12〜14 小さすぎると読みにくい

軸ラベルの詳細設定

軸ラベルは、フォントサイズや色、太さなどを細かくカスタマイズできます。xlabel()とylabel()には、以下のようなオプション引数(パラメータ)があります。

📊 軸ラベルのオプション引数
引数 意味 使用例 効果
fontsize 文字の大きさ fontsize=14 文字が大きくなり読みやすくなる
fontweight 文字の太さ fontweight=’bold’ 太字になり目立つ
color 文字の色 color=’darkblue’ 指定した色に変わる
labelpad 軸からの距離 labelpad=10 ラベルと軸の間隔が広がる

詳細設定を使った軸ラベルの例を見てみましょう。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) # 詳細な軸ラベル設定 plt.xlabel( ‘時間(秒)’, fontsize=14, # フォントサイズを14に fontweight=’bold’, # 太字にする color=’darkblue’, # 濃い青色にする labelpad=10 # 軸から10ポイント離す ) plt.ylabel( ‘距離(メートル)’, fontsize=14, fontweight=’bold’, color=’darkgreen’, # 濃い緑色にする labelpad=10 ) plt.title(‘時間と距離の関係’, fontsize=18, fontweight=’bold’, pad=20) plt.grid(True, alpha=0.3) plt.show()

📌 2. タイトルの設定

タイトルの役割と重要性

グラフのタイトルは、見る人が最初に読む情報です。良いタイトルは、グラフを見る前に「何についてのグラフなのか」を瞬時に伝えます。

STEP 2で学んだように、タイトルは「何のグラフか」ではなく「何がわかるか」を伝えるのがベストプラクティスです。

💡 タイトルの書き方のポイント

タイトルには2つのスタイルがあります。状況に応じて使い分けましょう。

スタイル 適した場面
説明型 「月別売上推移」 データ探索時、レポートの補足
結論型(推奨) 「2024年の売上は前年比20%増加」 プレゼン、経営報告、意思決定

title()関数の基本

Matplotlibでは、plt.title()関数でタイトルを設定します。

【title()の基本構文】 plt.title(‘タイトルのテキスト’) 【よく使うオプション】 plt.title( ‘タイトルのテキスト’, fontsize=16, # 文字サイズ(推奨: 16〜20) fontweight=’bold’, # 太字にする color=’darkblue’, # 文字色 pad=20, # グラフからの距離 loc=’left’ # 位置(’left’, ‘center’, ‘right’) )

シンプルなタイトルの例を見てみましょう。

import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) # シンプルなタイトル plt.title(‘売上推移グラフ’) plt.grid(True, alpha=0.3) plt.show()

タイトルの詳細設定

タイトルをもっとカスタマイズしてみましょう。以下のオプションを使うことで、プロフェッショナルな見た目になります。

📊 title()のオプション引数
引数 意味 使用例 効果
fontsize 文字の大きさ fontsize=18 大きく目立つタイトルになる
fontweight 文字の太さ fontweight=’bold’ 太字で強調される
color 文字の色 color=’darkblue’ 指定した色に変わる
pad グラフからの距離 pad=20 タイトルが上に離れる
loc タイトルの位置 loc=’left’ 左寄せになる

詳細設定を使ったタイトルの例です。

import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) # 詳細なタイトル設定 plt.title( ‘2024年度 月別売上推移’, fontsize=18, # フォントサイズを18に fontweight=’bold’, # 太字にする color=’darkblue’, # 濃い青色にする pad=20, # グラフから20ポイント離す loc=’left’ # 左寄せにする ) plt.grid(True, alpha=0.3) plt.show()
💡 loc引数の効果

loc引数でタイトルの位置を変更できます。

  • loc=’center’:中央(デフォルト)
  • loc=’left’:左寄せ(ビジネス資料で人気)
  • loc=’right’:右寄せ

サブタイトル(副題)の追加

メインタイトルに加えて、補足情報をサブタイトルとして追加することがあります。Matplotlibには直接サブタイトルを設定する関数がないため、fig.text()を使って実現します。

【サブタイトルの仕組み】 fig.text(x, y, ‘テキスト’) ・x, y は図全体に対する位置(0〜1の範囲) ・x=0.5 なら横方向の中央 ・y=0.88 なら縦方向の88%の位置(上の方) 【図の座標系】 (0,1)────────────(1,1) │ │ │ タイトル位置 │ │ (0.5, 0.88) │ │ │ │ │ (0,0)────────────(1,0)

サブタイトルを追加した例を見てみましょう。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # figureとaxesを作成(fig.textを使うため) fig, ax = plt.subplots(figsize=(10, 6)) ax.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) # メインタイトル ax.set_title(‘2024年度 月別売上推移’, fontsize=18, fontweight=’bold’, pad=20) # サブタイトル(テキストとして追加) fig.text(0.13, 0.88, ‘※前年比120%達成’, fontsize=11, color=’gray’, style=’italic’) ax.grid(True, alpha=0.3) plt.show()

🎨 3. 凡例(Legend)の設定

凡例とは何か

凡例(はんれい)とは、グラフに複数のデータ系列があるとき、「どの色・線が何を表しているか」を説明する部分です。英語では「Legend(レジェンド)」と呼びます。

例えば、2023年と2024年の売上を同じグラフに表示する場合、青い線が2023年で、赤い線が2024年であることを示す必要があります。これが凡例の役割です。

💡 凡例の役割を地図で考える

地図の凡例を思い出してください。

青い線 = 川、緑の塗りつぶし = 森、赤い点 = 観光地

この「色と意味の対応表」がないと、地図を読み解くのは困難です。グラフの凡例も同じ役割を果たします。

凡例の基本的な使い方

凡例を表示するには、2つのステップが必要です。

📊 凡例表示の2ステップ
ステップ やること コード例
1. ラベルを設定 plot()にlabel引数を追加 plt.plot(…, label=’2023年’)
2. 凡例を表示 legend()関数を呼び出す plt.legend()

注意:label引数だけでは凡例は表示されません。必ずplt.legend()を呼び出してください。

基本的な凡例の例を見てみましょう。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt # データ months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales_2023 = [100, 120, 150, 130, 160, 180] sales_2024 = [110, 140, 170, 160, 190, 220] plt.figure(figsize=(10, 6)) # label引数で凡例に表示する名前を指定 plt.plot(months, sales_2023, marker=’o’, linewidth=2.5, color=’steelblue’, label=’2023年’) plt.plot(months, sales_2024, marker=’s’, linewidth=2.5, color=’coral’, label=’2024年’) # 凡例を表示(この行がないと凡例は表示されない!) plt.legend() plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(‘年度別売上比較’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) plt.show()

凡例の位置指定

凡例の位置は、loc引数で指定します。適切な位置を選ぶことで、データを隠さずに凡例を表示できます。

💡 loc引数で指定できる位置
loc引数 位置 使いどころ
‘best’ 自動で最適な位置 迷ったらこれを使う(推奨)
‘upper right’ 右上 左下にデータが集中する場合
‘upper left’ 左上 右下にデータが集中する場合
‘lower right’ 右下 左上にデータが集中する場合
‘lower left’ 左下 右上にデータが集中する場合
‘center’ 中央 通常は使わない(データを隠す)
【位置のイメージ図】 ┌─────────────────────────────────┐ │ upper left │ upper center │ upper right │ ├────────────┼────────────────┼─────────────┤ │ center left│ center │ center right│ ├────────────┼────────────────┼─────────────┤ │ lower left │ lower center │ lower right │ └─────────────────────────────────┘

凡例の詳細設定

凡例は、枠線、影、タイトルなど、さまざまなカスタマイズが可能です。

📊 legend()のオプション引数
引数 意味 使用例 効果
loc 位置 loc=’upper left’ 左上に配置
fontsize 文字サイズ fontsize=11 文字が大きく/小さくなる
frameon 枠線の有無 frameon=True 枠線が表示される
shadow 影の有無 shadow=True 凡例に影がつく
fancybox 角を丸くする fancybox=True 角丸の枠になる
title 凡例のタイトル title=’年度’ 凡例に見出しがつく

詳細設定を使った凡例の例です。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales_2023 = [100, 120, 150, 130, 160, 180] sales_2024 = [110, 140, 170, 160, 190, 220] plt.figure(figsize=(10, 6)) plt.plot(months, sales_2023, marker=’o’, linewidth=2.5, color=’steelblue’, label=’2023年’) plt.plot(months, sales_2024, marker=’s’, linewidth=2.5, color=’coral’, label=’2024年’) # 凡例の詳細設定 plt.legend( loc=’upper left’, # 左上に配置 fontsize=11, # フォントサイズ frameon=True, # 枠を表示 shadow=True, # 影をつける fancybox=True, # 角を丸くする title=’年度’, # 凡例のタイトル title_fontsize=12 # タイトルのフォントサイズ ) plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(‘年度別売上比較’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) plt.show()

凡例をグラフ外に配置

データが多い場合や凡例がグラフを隠してしまう場合は、グラフの外側に凡例を配置することができます。これにはbbox_to_anchor引数を使います。

【bbox_to_anchorの仕組み】 bbox_to_anchor=(x, y) で凡例のアンカーポイント(基準点)を指定 ・x=1.0 はグラフの右端 ・x=1.05 はグラフの右端から少し外側 ・y=1.0 はグラフの上端 【よく使う設定】 グラフの右外側に配置: bbox_to_anchor=(1.05, 1), loc=’upper left’ グラフの下に配置: bbox_to_anchor=(0.5, -0.15), loc=’upper center’

グラフ外に凡例を配置する例です。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales_2023 = [100, 120, 150, 130, 160, 180] sales_2024 = [110, 140, 170, 160, 190, 220] plt.figure(figsize=(12, 6)) # 凡例のスペースを確保するため幅を広げる plt.plot(months, sales_2023, marker=’o’, linewidth=2.5, color=’steelblue’, label=’2023年’) plt.plot(months, sales_2024, marker=’s’, linewidth=2.5, color=’coral’, label=’2024年’) # グラフの右外側に凡例を配置 plt.legend( bbox_to_anchor=(1.05, 1), # (x, y) 1より大きい値で外側 loc=’upper left’, # アンカーポイントを凡例の左上に fontsize=11, frameon=True ) plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(‘年度別売上比較’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) plt.tight_layout() # 凡例が切れないように自動調整 plt.show()
⚠️ tight_layout()を忘れずに

bbox_to_anchorでグラフ外に凡例を配置する場合、plt.tight_layout()を呼び出さないと凡例が切れてしまうことがあります。必ずplt.show()の前に追加しましょう。

💬 4. テキスト注釈の追加

注釈の役割と重要性

グラフに注釈(アノテーション)を追加することで、特定のポイントを強調したり、追加情報を提供したりできます。STEP 2で学んだ「タイトルで結論を伝える」原則と同様に、注釈は「何が重要か」を見る人に直接伝える手段です。

Matplotlibには2つの注釈機能があります:text()annotate()です。

📊 text() vs annotate() の違い
項目 text() annotate()
主な用途 単純なテキストを配置 矢印で特定のポイントを指し示す
矢印 なし あり(推奨)
適した場面 補足説明、注記、出典 最高値、最低値、異常値の強調
視覚的効果 控えめ 目立つ(矢印で視線を誘導)
💡 身近な例で考えてみよう

新聞や雑誌のグラフを思い出してください。

text()のような注釈:グラフ下の「出典:〇〇省」

annotate()のような注釈:「過去最高!」と矢印でピーク点を指している

text()による注釈

text()関数は、グラフ上の指定した座標にテキストを配置します。出典の記載や補足説明に適しています。

【text()の基本構文】 plt.text(x, y, ‘テキスト’) ・x, y はデータの座標(グラフの目盛りに対応) ・例:x=2, y=155 なら、X軸が2、Y軸が155の位置 【よく使うオプション】 plt.text( x, y, ‘テキスト’, fontsize=12, # 文字サイズ color=’red’, # 文字色 fontweight=’bold’, # 太字 bbox=dict(…) # 背景ボックス )

text()を使った注釈の例を見てみましょう。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales = [100, 120, 150, 130, 160, 180] plt.figure(figsize=(10, 6)) plt.plot(months, sales, marker=’o’, linewidth=2.5, color=’steelblue’) # テキスト注釈を追加 plt.text( 2, 155, # (x座標, y座標) – 「3月」の上あたり ‘過去最高!’, # 表示するテキスト fontsize=14, # フォントサイズ color=’red’, # 赤色で目立たせる fontweight=’bold’, # 太字にする bbox=dict( # テキストの背景を設定 boxstyle=’round,pad=0.5′, # 角丸の四角形、余白0.5 facecolor=’yellow’, # 背景色を黄色に alpha=0.7 # 透明度70% ) ) plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(‘月別売上推移’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) plt.show()
💡 bbox引数でテキストの背景を設定

bbox引数を使うと、テキストの後ろに背景ボックスを追加できます。これにより、グラフの線とテキストが重なっても読みやすくなります。

オプション 意味
boxstyle ボックスの形 ‘round,pad=0.5’(角丸)、’square’(四角)
facecolor 背景色 ‘yellow’, ‘white’, ‘#ffff00’
alpha 透明度 0.7(70%不透明)、1.0(完全に不透明)
edgecolor 枠線の色 ‘red’, ‘black’

annotate()による矢印付き注釈

annotate()関数は、特定のデータポイントを矢印で指し示しながらテキストを表示します。最高値や異常値など、注目してほしいポイントを強調するのに最適です。

【annotate()の基本構文】 plt.annotate( ‘テキスト’, # 表示する文字 xy=(x1, y1), # 矢印の先端(指し示したいポイント) xytext=(x2, y2), # テキストの位置 arrowprops=dict(…) # 矢印のスタイル ) 【xyとxytextの違い】 ・xy:矢印が指すポイント(データの座標) ・xytext:テキストを表示する位置(データの座標) 【イメージ】 テキスト ← xytext=(x2, y2) ↓ ────→● ← xy=(x1, y1) 矢印

annotate()を使った矢印付き注釈の例です。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales = [100, 120, 150, 130, 160, 180] plt.figure(figsize=(10, 6)) plt.plot(months, sales, marker=’o’, linewidth=2.5, color=’steelblue’) # 矢印付き注釈を追加 plt.annotate( ‘過去最高の売上!’, # 表示するテキスト xy=(5, 180), # 矢印の先端(6月のデータポイント) xytext=(3.5, 165), # テキストの位置 fontsize=12, # フォントサイズ color=’red’, # 文字色 fontweight=’bold’, # 太字 bbox=dict( # テキストの背景 boxstyle=’round,pad=0.5′, facecolor=’yellow’, alpha=0.8 ), arrowprops=dict( # 矢印のスタイル arrowstyle=’->’, # 矢印の形(→) color=’red’, # 矢印の色 lw=2 # 線の太さ ) ) plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(‘月別売上推移’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) plt.show()
📊 arrowpropsのオプション
オプション 意味 よく使う値
arrowstyle 矢印の形 ‘->’(シンプル)、’-|>’(三角)、’fancy’(装飾)
color 矢印の色 ‘red’, ‘black’, ‘blue’
lw 線の太さ 1, 1.5, 2(大きいほど太い)
connectionstyle 矢印の曲げ方 ‘arc3,rad=0.3’(曲線)、None(直線)

複数の注釈を追加

1つのグラフに複数の注釈を追加することで、さまざまなポイントを同時に強調できます。ただし、注釈が多すぎるとグラフが見にくくなるので、重要なポイントに絞ることが大切です。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales = [100, 120, 150, 130, 160, 180] plt.figure(figsize=(10, 6)) plt.plot(months, sales, marker=’o’, linewidth=2.5, color=’steelblue’) # 注釈1: 最高値を強調 plt.annotate( ‘最高!’, xy=(5, 180), xytext=(4, 170), fontsize=11, color=’red’, fontweight=’bold’, arrowprops=dict(arrowstyle=’->’, color=’red’, lw=1.5) ) # 注釈2: 前月比減少を指摘 plt.annotate( ‘前月比減少’, xy=(3, 130), xytext=(3.5, 115), fontsize=10, color=’blue’, arrowprops=dict(arrowstyle=’->’, color=’blue’, lw=1.5) ) plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(‘月別売上推移’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) plt.show()
💡 注釈を追加する際のベストプラクティス
  • 数を絞る:1つのグラフに2〜3個まで(多すぎると逆効果)
  • 重要なポイントだけ:最高値、最低値、転換点など
  • テキストは短く:「過去最高!」「前年比20%増」など
  • 色を効果的に:赤=警告/重要、青=情報、緑=良好

📏 5. グリッド線の詳細設定

グリッド線の役割

グリッド線(目盛り線)は、グラフの値を読み取りやすくするための補助線です。特に、データポイントの正確な値を知りたいときに役立ちます。

ただし、STEP 2で学んだように、グリッド線は「補助的な存在」です。濃すぎるグリッド線はデータを見にくくするため、適切な設定が重要です。

⚠️ グリッド線の注意点

Excelのデフォルトのグリッド線は濃すぎることが多いです。Matplotlibでも同様に、デフォルトのままだとグリッド線が目立ちすぎる場合があります。

推奨:alpha(透明度)を0.3〜0.5に設定し、グリッド線を薄くしましょう。

基本的なグリッド

plt.grid(True)でグリッド線を表示します。

import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) # グリッド線を表示 plt.grid(True) plt.xlabel(‘X軸’, fontsize=12) plt.ylabel(‘Y軸’, fontsize=12) plt.title(‘グリッド線の基本’, fontsize=16, fontweight=’bold’) plt.show()

グリッド線のカスタマイズ

grid()関数には、色、線のスタイル、透明度などを設定するオプションがあります。

📊 grid()のオプション引数
引数 意味 よく使う値 効果
axis どの軸に表示するか ‘both’, ‘x’, ‘y’ ‘y’で横線のみ表示
color 線の色 ‘gray’, ‘#cccccc’ グレーが目立ちすぎず推奨
linestyle 線のスタイル ‘–‘(破線), ‘:’(点線), ‘-‘(実線) 破線が控えめで推奨
linewidth 線の太さ 0.5, 0.7, 1.0 細い方がデータを邪魔しない
alpha 透明度 0.3〜0.5(推奨) 薄くするとデータが際立つ

カスタマイズしたグリッド線の例です。

import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) # 詳細なグリッド設定 plt.grid( True, # グリッドを表示 axis=’both’, # ‘x’, ‘y’, ‘both’ から選択 color=’gray’, # グリッド線の色 linestyle=’–‘, # 線のスタイル(’–‘は破線) linewidth=0.7, # 線の太さ alpha=0.5 # 透明度(0〜1) ) plt.xlabel(‘X軸’, fontsize=12) plt.ylabel(‘Y軸’, fontsize=12) plt.title(‘カスタマイズされたグリッド線’, fontsize=16, fontweight=’bold’) plt.show()

棒グラフにはY軸のみのグリッド

棒グラフでは、Y軸(横線)のみのグリッドがよく使われます。縦のグリッド線は棒と重なって見にくくなるためです。

import matplotlib.pyplot as plt categories = [‘A商品’, ‘B商品’, ‘C商品’, ‘D商品’, ‘E商品’] values = [100, 120, 80, 150, 90] plt.figure(figsize=(10, 6)) plt.bar(categories, values, color=’steelblue’, edgecolor=’black’) # Y軸のみにグリッド(棒グラフで推奨) plt.grid(True, axis=’y’, linestyle=’–‘, alpha=0.7) plt.xlabel(‘商品’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(‘商品別売上’, fontsize=16, fontweight=’bold’) plt.show()
💡 グラフの種類別おすすめグリッド設定
グラフの種類 推奨設定 理由
棒グラフ axis=’y’(横線のみ) 縦線は棒と重なり見にくい
折れ線グラフ axis=’both’(両方) 時系列の正確な値を読むため
散布図 axis=’both’(両方) X-Y座標の両方が重要
円グラフ グリッドなし 円グラフには不要

🎯 6. 実践的な例:完成度の高いグラフを作る

ここまで学んだ内容をすべて組み合わせて、プロフェッショナルなグラフを作成してみましょう。このコードは長いですが、各部分の役割を理解すれば難しくありません。

【完成グラフの構成要素】 1. 基本設定 – figsize:グラフのサイズ – plot():データのプロット 2. ラベルとタイトル – title():結論を伝えるタイトル – xlabel(), ylabel():軸ラベル(単位付き) 3. 凡例 – legend():複数データの識別 4. 注釈 – annotate():最高値を矢印で強調 5. グリッド – grid():値を読みやすくする補助線 6. 補足情報 – text():出典や注記

以下が完成コードです。Google Colabにコピー&ペーストして実行してみてください。

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt # データ months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales_2023 = [100, 120, 150, 130, 160, 180] sales_2024 = [110, 140, 170, 160, 190, 220] # グラフのサイズを設定 plt.figure(figsize=(12, 7)) # データをプロット plt.plot(months, sales_2023, marker=’o’, linewidth=2.5, color=’steelblue’, label=’2023年’, markersize=8) plt.plot(months, sales_2024, marker=’s’, linewidth=2.5, color=’coral’, label=’2024年’, markersize=8) # タイトルと軸ラベル plt.title(‘年度別月別売上推移’, fontsize=18, fontweight=’bold’, pad=20, loc=’left’) plt.xlabel(‘月’, fontsize=13, fontweight=’bold’, labelpad=10) plt.ylabel(‘売上(万円)’, fontsize=13, fontweight=’bold’, labelpad=10) # 凡例 plt.legend(loc=’upper left’, fontsize=11, frameon=True, shadow=True, fancybox=True) # 注釈: 2024年6月の最高値を強調 plt.annotate( ‘過去最高!\n220万円達成’, xy=(5, 220), xytext=(3.5, 210), fontsize=11, color=’red’, fontweight=’bold’, bbox=dict( boxstyle=’round,pad=0.6′, facecolor=’yellow’, alpha=0.8, edgecolor=’red’, linewidth=2 ), arrowprops=dict( arrowstyle=’->’, color=’red’, lw=2, connectionstyle=’arc3,rad=0.3′ ) ) # グリッド plt.grid(True, linestyle=’–‘, alpha=0.4, linewidth=0.7) # 補足情報 plt.text(0.5, 95, ‘※2024年は前年比平均15%増’, fontsize=10, color=’gray’, style=’italic’) plt.tight_layout() plt.show()

📝 STEP 10 のまとめ

✅ このステップで学んだこと
トピック 重要ポイント
軸ラベル xlabel(), ylabel()で単位を明記。fontsize=12〜14が読みやすい
タイトル title()で結論を伝える。fontsize=16〜18、loc=’left’で左寄せ
凡例 label引数+legend()。loc=’best’で自動配置が便利
text()注釈 座標を指定してテキストを配置。補足説明や出典に最適
annotate()注釈 矢印で特定ポイントを強調。最高値・異常値に使用
グリッド線 alpha=0.3〜0.5で薄く。棒グラフはaxis=’y’のみ
💡 最重要ポイント

グラフは「見ただけでわかる」ことが重要です。軸ラベル、タイトル、凡例を適切に設定し、必要に応じて注釈を追加しましょう。

特にannotate()による矢印付き注釈は、重要なポイントを効果的に伝えるための強力なツールです。ただし、注釈は多すぎると逆効果なので、2〜3個に絞りましょう。

次のステップでは、グラフの保存とエクスポート方法を学びます!

📝 実践演習

演習 1 基礎

折れ線グラフを作成し、タイトル、軸ラベル(単位付き)、凡例を追加してください。

【解答のポイント】

以下の3つを必ず設定します:

  • title():何のグラフかわかるタイトル
  • xlabel(), ylabel():単位を含む軸ラベル
  • label引数 + legend():凡例の表示

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’] sales = [100, 120, 150, 130, 160] plt.figure(figsize=(10, 6)) plt.plot(months, sales, marker=’o’, linewidth=2.5, color=’steelblue’, label=’2024年売上’) # タイトルと軸ラベル plt.title(‘月別売上推移’, fontsize=16, fontweight=’bold’) plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) # 凡例 plt.legend(loc=’best’, fontsize=11) plt.grid(True, alpha=0.3) plt.show()
演習 2 応用

折れ線グラフに矢印付きの注釈を追加し、最高値(5月の160万円)を強調してください。

【解答のポイント】

annotate()を使用して、以下を設定します:

  • xy:矢印の先端(最高値のデータポイント)
  • xytext:テキストの位置(xyから少し離す)
  • arrowprops:矢印のスタイル

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’] sales = [100, 120, 150, 130, 160] plt.figure(figsize=(10, 6)) plt.plot(months, sales, marker=’o’, linewidth=2.5, color=’steelblue’, label=’2024年売上’) # タイトルと軸ラベル plt.title(‘月別売上推移’, fontsize=16, fontweight=’bold’) plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) # 最高値を注釈で強調 plt.annotate( ‘最高値!\n160万円’, xy=(4, 160), # 5月(インデックス4)のデータポイント xytext=(2.5, 155), # テキストの位置 fontsize=12, color=’red’, fontweight=’bold’, bbox=dict( boxstyle=’round,pad=0.5′, facecolor=’yellow’, alpha=0.8 ), arrowprops=dict( arrowstyle=’->’, color=’red’, lw=2 ) ) plt.legend(loc=’upper left’, fontsize=11) plt.grid(True, alpha=0.3) plt.show()
演習 3 発展

2つのデータ系列(2023年と2024年)をプロットし、それぞれの最高値に注釈を追加してください。凡例はグラフの右外側に配置してください。

【解答のポイント】

複数の要素を組み合わせます:

  • 2つのplot():それぞれにlabel引数を設定
  • 2つのannotate():各データ系列の最高値に
  • bbox_to_anchor:凡例をグラフ外に配置
  • tight_layout():凡例が切れないように

※コードが長い場合は横にスクロールできます

import matplotlib.pyplot as plt months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’] sales_2023 = [100, 120, 150, 130, 160] sales_2024 = [110, 140, 170, 160, 190] plt.figure(figsize=(12, 7)) plt.plot(months, sales_2023, marker=’o’, linewidth=2.5, color=’steelblue’, label=’2023年’) plt.plot(months, sales_2024, marker=’s’, linewidth=2.5, color=’coral’, label=’2024年’) plt.title(‘年度別売上比較’, fontsize=18, fontweight=’bold’, pad=20) plt.xlabel(‘月’, fontsize=13, labelpad=10) plt.ylabel(‘売上(万円)’, fontsize=13, labelpad=10) # 2023年の最高値 plt.annotate( ‘2023年最高’, xy=(4, 160), xytext=(3, 145), fontsize=10, color=’steelblue’, arrowprops=dict(arrowstyle=’->’, color=’steelblue’, lw=1.5) ) # 2024年の最高値 plt.annotate( ‘2024年最高!’, xy=(4, 190), xytext=(2.5, 180), fontsize=11, color=’red’, fontweight=’bold’, bbox=dict( boxstyle=’round,pad=0.5′, facecolor=’yellow’, alpha=0.8 ), arrowprops=dict(arrowstyle=’->’, color=’red’, lw=2) ) # 凡例をグラフの右外側に配置 plt.legend( bbox_to_anchor=(1.05, 1), loc=’upper left’, fontsize=11, frameon=True, shadow=True ) plt.grid(True, linestyle=’–‘, alpha=0.4) plt.tight_layout() plt.show()

❓ よくある質問

Q1: text()とannotate()はどう使い分けるべきですか?
特定のポイントを指し示す場合はannotate()を使いましょう。annotate()は矢印を使って「このデータポイントを見て!」と視覚的にわかりやすく表現できます。一方、出典の記載や補足説明など、特定のポイントを指さない場合はtext()で十分です。

使い分けの目安:
・「最高値を強調したい」→ annotate()
・「出典:〇〇省」と書きたい → text()

Q2: 注釈のテキストがグラフの線と重なって見づらいです。どうすればいいですか?
bbox引数で背景色を追加しましょう。bbox=dict(boxstyle=’round,pad=0.5′, facecolor=’yellow’, alpha=0.8)のように設定すると、テキストの後ろに背景ボックスが表示され、グラフの線と重なっても読みやすくなります。

ポイント:alpha(透明度)を0.7〜0.9にすると、背景を透過させつつテキストを読みやすくできます。

Q3: 凡例がグラフのデータを隠してしまいます。どうすればいいですか?
3つの解決方法があります。
  1. loc=’best’を使う:Matplotlibが自動で最適な位置を選びます
  2. bbox_to_anchorでグラフ外に配置:bbox_to_anchor=(1.05, 1), loc=’upper left’で右外側に
  3. 凡例のサイズを小さくする:fontsize=9など

グラフ外に配置する場合は、plt.tight_layout()を忘れずに追加してください。

Q4: annotate()のxyとxytextの座標はどう決めればいいですか?
xy(矢印の先端)はデータの座標、xytext(テキスト)は読みやすい位置を選びます。

手順:

  1. xyには強調したいデータポイントの座標を指定(例:最高値の(5, 180))
  2. xytextはxyから少し離れた位置を指定。テキストがデータを隠さないよう調整
  3. 実行してみて、位置が悪ければ数値を微調整

ヒント:文字列に\n(改行)を含む場合は、xytextの座標をさらに調整する必要があります。

Q5: グリッド線は表示すべきですか、しないべきですか?
グラフの目的によります。

グリッド線を表示すべき場合:

  • 正確な値を読み取る必要がある(レポート、分析)
  • 折れ線グラフや散布図で座標が重要

グリッド線が不要または薄くすべき場合:

  • プレゼンで全体のトレンドを見せたい
  • 円グラフ(グリッドは不要)

推奨:迷ったらalpha=0.3で薄く表示。データが際立ちつつ、値も読める状態がベストです。

📝

学習メモ

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

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