Matplotlib 折れ線グラフ入門:描き方:色・線種・凡例を完全解説【第2回】

Converted Colab Notebook

折れ線グラフは、値の推移や変化を直感的に表現できる可視化手法です。本記事では、Pythonの可視化ライブラリMatplotlibを使って、色・線種・マーカーを自由に設定し、複数系列を描画する方法を解説します。

この記事でわかること

  • 基本的な折れ線グラフの描き方
  • 色・線種・マーカーの設定方法
  • 複数系列の描画と凡例の設定
  • 見やすいグラフにするための調整テクニック

1. 基本の折れ線グラフ

このセクションでは、Matplotlib を使用して基本的な折れ線グラフを作成する方法を学びます。

import pandas as pd
import matplotlib.pyplot as plt

!pip install japanize-matplotlib > /dev/null # Google Colab の機能を使って日本語フォントをインストール・インポート
import japanize_matplotlib


# データをDataFrameにする
data = {"x": [1, 2, 3, 4, 5], "y": [2, 4, 3, 5, 7]}
df = pd.DataFrame(data)

fig, ax = plt.subplots()
ax.plot(df["x"], df["y"])
ax.set_title("基本の折れ線グラフ")
ax.set_xlabel("x軸")
ax.set_ylabel("y軸")
plt.show()

figure

<Figure size 640x480 with 1 Axes>

最小限のコードで折れ線グラフを描画できます。ここでは、plt.subplots()ax.plot() を使用しています。

  • plt.subplots() は、グラフ全体のキャンバスとなる Figure オブジェクトと、実際にグラフを描画する領域である Axes オブジェクトを生成します。Figure は複数の Axes を含むことができますが、ここでは1つのAxesを作成しています。
  • ax.plot() メソッドが、指定したAxesオブジェクト上に折れ線グラフを実際に描画します。このメソッドには、x軸のデータとy軸のデータをリストやPandas Seriesとして渡すことができます。
  • 例として、ax.plot(df["x"], df["y"]) のように、DataFrameの特定の列を直接引数として指定することで、簡単にデータをプロットできます。

2. 色・線種・マーカーの設定

このセクションでは、折れ線グラフの色、線種、マーカーをカスタマイズする方法を学びます。ax.plot() メソッドの引数を使用することで、これらの設定を柔軟に行うことができます。

fig, ax = plt.subplots()

ax.plot(df["x"],df["y"], color="red", linestyle="--", marker="o", linewidth=2, markersize=8)
ax.set_title("色・線種・マーカーを指定")
ax.set_xlabel("x軸")
ax.set_ylabel("y軸")
plt.show()

figure

<Figure size 640x480 with 1 Axes>
  • color: 線の色を指定します。様々な形式で指定可能です。
  • 色名: "red", "blue", "green", "black" など、多くの標準的な色名が使用できます。
  • 16進カラーコード: " #FF0000" (赤), " #0000FF" (青) のように、RGB値を16進数で指定します。
  • RGB tuple: (1, 0, 0) (赤), (0, 0, 1) (青) のように、0から1の範囲でRGB値をタプルで指定します。
  • 略記: 一部の色は1文字で指定できます。例: "r" (赤), "g" (緑), "b" (青), "k" (黒), "w" (白), "c" (シアン), "m" (マゼンタ), "y" (黄)。
  • linestyle: 線のスタイルを指定します。
  • -: 実線 (solid) – デフォルト
  • --: 破線 (dashed)
  • -.: 一点鎖線 (dashdot)
  • :: 点線 (dotted)
  • None または "": 線を表示しない(マーカーのみ表示したい場合などに使用)
  • marker: データ点に表示するマーカーのスタイルを指定します。様々な記号が利用可能です。
  • 'o': 丸 (circle)
  • 's': 四角 (square)
  • '^': 上向き三角 (triangle_up)
  • 'v': 下向き三角 (triangle_down)
  • 'x': バツ (x)
  • '*': アスタリスク (star)
  • '+': プラス (plus)
  • '.': 点 (point)
  • ',': ピクセル (pixel)
  • 他にも多くのマーカーがあります。

    ▶️ Matplotlib.markersの公式ドキュメントも参考にしてください:
    Matplotlib.markers Documentation

    • linewidth: 線の太さを指定します。浮動小数点数で指定し、値が大きいほど線が太くなります。デフォルトは1.5です。例: linewidth=2
    • markersize: マーカーのサイズを指定します。浮動小数点数で指定し、値が大きいほどマーカーが大きくなります。例: markersize=8

    これらのパラメータを組み合わせることで、グラフの各系列を視覚的に区別しやすく、より分かりやすいグラフを作成できます。

    3. 複数系列と凡例の設定

    複数の折れ線グラフを描画した場合、どの線がどのデータ系列に対応するかを明確にするために「凡例(Legend)」を表示することが重要です。凡例は、ax.legend() メソッドを呼び出すことで表示できます。ax.plot() メソッドに label 引数で指定した文字列が、凡例に表示されます。

    # 2つめのDataFrameを作成
    data2 = {"x2": [1, 2, 3, 4, 5], "y2": [1, 3, 4, 6, 8]}
    df2 = pd.DataFrame(data2)
    # 1つめの折れ線グラフに凡例を表示するためのlabelを追加
    fig, ax = plt.subplots()
    ax.plot(df["x"], df["y"], label="データ1", color="red", linestyle="--", marker="o", linewidth=2, markersize=8)
    # 2つめの折れ線グラフの追加
    ax.plot(df2["x2"], df2["y2"], label="データ2", color="green", linestyle="--", marker="s",linewidth=2, markersize=8)
    ax.set_title("複数系列の折れ線グラフ")
    ax.set_xlabel("x軸")
    ax.set_ylabel("y軸")
    # 凡例の表示し、位置を調整
    ax.legend(loc="upper left")
    plt.show()

    figure

    <Figure size 640x480 with 1 Axes>

    ax.legend() には、凡例の見た目や配置を調整するための様々なパラメータがあります。

    • loc: 凡例を表示する位置を指定します。最もよく使われるパラメータの一つです。
    • キーワード: 事前に定義された位置を指定できます。
    • "best": 凡例が他のグラフ要素と重ならない最適な位置に自動配置されます。(推奨)
    • "upper right": 右上
    • "upper left": 左上
    • "lower right": 右下
    • "lower left": 左下
    • "right": 右
    • "center left": 中央左
    • "center right": 中央右
    • "lower center": 下中央
    • "upper center": 上中央
    • "center": 中央
    • 座標タプル: (x, y) の形式で、Axesの左下を基準(0,0)、右上を(1,1)とする相対座標で凡例の左下隅の位置を指定することも可能です。例: loc=(1.05, 1) とすると、Axesの外側右上に凡例が表示されます。
    • fontsize: 凡例のテキストのフォントサイズを指定します。
    • 数値で指定する他、文字列で指定することも可能です。例: fontsize=12, fontsize='small'
    • 利用可能な文字列: 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'
    • frameon: 凡例の周りにフレーム(枠線と背景)を表示するかどうかを指定します。
    • True: フレームを表示する(デフォルト)
    • False: フレームを表示しない
    • ncol: 凡例の列数を指定します。凡例の項目が多い場合に、複数列に分けて表示することでコンパクトにできます。
    • デフォルトは1列です。例: ncol=2 とすると、凡例項目が2列で表示されます。
    • title: 凡例の上にタイトルを表示する場合に指定します。文字列で指定します。例: title="データ系列"

    これらのパラメータを適切に設定することで、グラフ全体のレイアウトを崩さずに、凡例を分かりやすく表示することができます。特に loc="best" は便利ですが、意図した位置に表示されない場合は他のキーワードや座標指定を試してみてください。

    4. 見やすくするための工夫

    このセクションでは、折れ線グラフをより見やすく、読解しやすくするための追加のカスタマイズ方法を学びます。適切に要素を追加することで、グラフが伝える情報を強化できます。

    fig, ax = plt.subplots()
    ax.plot(df["x"], df["y"], label="データ1", color="red", linestyle="--", marker="o", linewidth=2, markersize=8)
    ax.plot(df2["x2"], df2["y2"], label="データ2", color="green", linestyle="--", marker="s",linewidth=2, markersize=8)
    ax.set_title("見やすくした例")
    # 軸ラベルの変更
    ax.set_xlabel("日付")
    ax.set_ylabel("値")
    ax.legend()
    # 背景グリッドを表示
    ax.grid(True, linestyle=":", alpha=0.7)
    # グラフに注釈を追加
    ax.annotate("注釈", xy=(4,5), xytext=(4.5,5.5),
                arrowprops=dict(facecolor="black", arrowstyle="->"))
    plt.show()
    

    figure

    <Figure size 640x480 with 1 Axes>

    軸ラベルの変更

    軸ラベルは、それぞれの軸が何を表しているのか、どのような単位なのかを明確に伝えるために非常に重要です。ax.set_xlabel()ax.set_ylabel() メソッドを使用することで、x軸とy軸のラベルテキストを設定できます。これにより、グラフを見る人がデータの意味を正確に理解できるようになります。例では、「日付」と「値」という具体的なラベルに変更しました。

    背景グリッドの表示

    背景グリッドは、グラフ上の特定の点の値を読み取りやすくするために役立ちます。ax.grid() メソッドを呼び出すことで、グラフの背景にグリッド線を表示できます。

    • True または False: グリッドを表示するかどうかを指定します。ax.grid(True) で表示、ax.grid(False) で非表示になります。
    • axis: グリッドを表示する軸を指定します。
    • 'both' (デフォルト): x軸とy軸の両方にグリッドを表示します。
    • 'x': x軸にのみグリッドを表示します。
    • 'y': y軸にのみグリッドを表示します。
    • linestyle: グリッド線のスタイルを指定します。ax.plot()linestyle と同様に、-, --, -., : などが使用できます。
    • color: グリッド線の色を指定します。
    • alpha: グリッド線の透明度を指定します。0(完全に透明)から1(完全に不透明)の間の浮動小数点数で指定します。値を小さくすると、グリッド線が背景に馴染みやすくなります。例: alpha=0.7

    例では、ax.grid(True, linestyle=":", alpha=0.7) としており、両方の軸に点線のグリッドを少し薄く表示しています。

    グラフへの注釈の追加

    特定のデータ点やグラフ上の領域に注目させたい場合、注釈 (Annotation) を追加することが非常に効果的です。ax.annotate() メソッドを使用すると、テキストとオプションで矢印をグラフ上に表示できます。

    ax.annotate(text, xy, xytext=None, arrowprops=None, **kwargs)

    • text: 表示したい注釈テキスト(文字列)です。
    • xy: 注釈を付けたいグラフ上の点の座標 (x, y) です。これは通常、データ点と一致させたり、特定のイベントが発生した位置などを指定します。
    • xytext: 注釈テキストを表示する位置の座標 (x, y) です。xy と同じ位置にすることも、少しずらして表示することもできます。指定しない場合は xy の位置に表示されます。
    • arrowprops: 注釈テキストの位置 (xytext) から注釈を付けたい点 (xy) へ引かれる矢印のスタイルを指定するための辞書です。非常に多くのオプションがありますが、よく使われるものをいくつか紹介します。
    • facecolor: 矢印の色を指定します。例: "black"
    • edgecolor: 矢印の枠線の色を指定します。
    • arrowstyle: 矢印の形状を指定します。例: "->" (シンプルな矢印), "-|>", "-[", "fancy", "simple" など。詳細なスタイルは Matplotlib のドキュメントを参照してください。
    • connectionstyle: 矢印の接続スタイルを指定します。直線、カーブなど。
    • shrinkA, shrinkB: 注釈テキスト (A) と注釈点 (B) から矢印をどれだけ短くするかを指定します。
    • patchA, patchB: 注釈テキストや注釈点の形状に合わせて矢印の開始点・終了点を調整します。

    注釈の応用例:

    • 特定のデータ点の強調: 例のように、グラフ上のピークや谷など、特定の意味を持つデータ点に注釈を付けて、その値や日付を示す。
    • グラフ内のイベント説明: データに影響を与えたイベント(例: キャンペーン開始、システム更新など)が発生した時点に注釈を追加し、何が起こったかを説明する。
    • 領域の説明: 特定の期間や範囲を矢印とテキストで囲んで説明する。

    これらの「見やすくするための工夫」は、単にグラフを装飾するだけでなく、伝えたい情報を強調し、グラフの読解性を飛躍的に向上させます。読者がグラフから素早く正確な情報を得られるように、状況に応じて適切な要素を活用しましょう。

    5. 次の記事

    次回は「棒・横棒グラフ:グループ化・積み上げ」を解説します。

    まとめ

    の記事では、Matplotlib を使用して魅力的で分かりやすい折れ線グラフを作成するための様々な方法を学びました。主要なポイントを振り返りましょう。

    • 基本の折れ線グラフ: plt.subplots() で Figure と Axes を作成し、ax.plot() に x, y データを渡すだけで基本的な折れ線グラフが描けることを学びました。Figure がキャンバス、Axes が描画領域であるという Matplotlib の基本構造を理解しました。
    • 色・線種・マーカーの設定: ax.plot()color, linestyle, marker, linewidth, markersize といったパラメータを使うことで、折れ線の見た目を自由にカスタマイズできることを学びました。色名、16進数、RGBなど様々な色指定方法や、実線、破線、点線、様々なマーカーの種類について詳しく解説しました。
    • 複数系列と凡例の設定: 複数のデータ系列を同じグラフに表示し、それぞれの系列を区別するために凡例が不可欠であることを学びました。ax.plot()label を指定し、ax.legend() を呼び出すことで凡例を表示できること、また ax.legend()loc, fontsize, frameon, ncol などのパラメータで凡例の表示位置やスタイルを調整できることを理解しました。
    • 見やすくするための工夫: グラフの読解性を高めるための追加要素として、軸ラベル (ax.set_xlabel(), ax.set_ylabel()) の重要性、背景グリッド (ax.grid()) の表示方法とオプション、そしてグラフ上の特定の点に注目させるための注釈 (ax.annotate()) の使い方と応用例を学びました。

    これらの知識を習得することで、単にデータをプロットするだけでなく、目的に合わせてグラフをデザインし、伝えたい情報を効果的に視覚化するスキルが身につきます。ぜひ、様々なデータをこれらの方法で可視化してみてください。

    Google Colab CSV 読み込み&保存入門|pandas で read_csv と to_csv を徹底解説【第 2 回】
    Google Colab と Google Drive を連携し、CSV を読み込み・保存する手順を画像付きで解説します。

    ▲ ページトップへ戻る

コメント

タイトルとURLをコピーしました