【Python】Matplotlibで折れ線グラフを作成し線のスタイルやマーカーを装飾する

目次

概要

Matplotlibの plot メソッドを使用して折れ線グラフを作成するレシピです。

単なる線の描画にとどまらず、線種(実線・点線)、色、太さ、透明度、データポイントのマーカー(記号)を細かく指定し、複数のデータ系列を区別しやすく可視化する方法を解説します。

仕様(入出力)

  • 入力: X軸データ(リスト等)、Y軸データ(リスト等)、装飾用パラメータ(フォーマット文字列、色、幅など)
  • 出力: グラフの描画ウィンドウ、または画像ファイル
  • 要件: matplotlib ライブラリがインストールされていること

最小の使い方

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4]
y_values = [10, 20, 15, 30]

fig, ax = plt.subplots()
# 最もシンプルな描画
ax.plot(x_values, y_values)
plt.show()

コード全文

異なる4種類のデータ系列に対し、それぞれ異なるスタイル(実線、破線、一点鎖線、点線)とマーカーを適用した完全なコードです。

import matplotlib.pyplot as plt

def main():
    # 1. データセットの準備(例:経過時間ごとの4つのセンサー値)
    time_points = [0, 1, 2, 3, 4, 5]
    
    sensor_a = [10, 12, 15, 14, 18, 20]
    sensor_b = [20, 18, 16, 15, 12, 10]
    sensor_c = [5, 8, 5, 8, 5, 8]
    sensor_d = [15, 15, 20, 20, 25, 25]

    # 2. 描画領域の作成
    fig, ax = plt.subplots(figsize=(8, 6))

    # 3. グラフのプロット(スタイル設定)
    
    # パターンA: 実線、赤、太め、星型マーカー、不透明
    ax.plot(
        time_points, sensor_a,
        fmt="-",            # 線種(実線)
        c="#FF5733",        # 色(Hex)
        linewidth=3,        # 線の太さ
        marker="*",         # マーカー形状
        markersize=10,      # マーカーサイズ(任意)
        alpha=1.0,          # 透明度
        label="Sensor A"
    )

    # パターンB: 破線、緑、標準、円形マーカー、半透明
    ax.plot(
        time_points, sensor_b,
        fmt="--",           # 線種(破線)
        c="green",          # 色(名前)
        linewidth=2,
        marker="o",
        alpha=0.7,
        label="Sensor B"
    )

    # パターンC: 一点鎖線、青、太め、菱形マーカー
    ax.plot(
        time_points, sensor_c,
        fmt="-.",           # 線種(一点鎖線)
        c="blue",
        linewidth=2.5,
        marker="D",         # Diamond
        alpha=0.6,
        label="Sensor C"
    )

    # パターンD: 点線、紫、細め、×印マーカー
    ax.plot(
        time_points, sensor_d,
        fmt=":",            # 線種(点線)
        c="purple",
        linewidth=1.5,
        marker="x",
        alpha=0.8,
        label="Sensor D"
    )

    # 4. タイトル・ラベル・凡例・グリッドの設定
    ax.set_title("Sensor Readings Over Time")
    ax.set_xlabel("Time (h)")
    ax.set_ylabel("Value")
    ax.legend()     # label引数の内容を表示
    ax.grid(True)   # グリッド線を表示

    # 5. 表示
    plt.show()

if __name__ == "__main__":
    main()

カスタムポイント

ax.plot() メソッドでグラフの見た目を制御する主要なパラメータです。

パラメータ説明設定例
xX軸のデータ(省略時はインデックスが使用される)。[0, 1, 2]
yY軸のデータ。必須。[10, 20, 15]
fmt線種・マーカー・色を短縮記法で指定する文字列。'-' (実線), '--' (破線), 'ro-' (赤・円・実線)
c (color)線の色。色名またはHexコード。'red', '#00FF00'
linewidth線の太さ(ポイント単位)。1, 2.5
alpha透明度(0.0〜1.0)。線とマーカー両方に適用。0.5 (半透明), 1.0 (不透明)
markerデータ点を示す記号の形状。'o' (円), 's' (四角), '^' (三角), 'x' (バツ)
  • fmtlinestyle: 線種は linestyle='--' のように明示的に書くことも、fmt 引数で '--' と書くことも可能です。
  • マーカーの強調: マーカーを目立たせたい場合は、markersize(サイズ)や markeredgecolor(マーカーの枠線色)も併せて調整すると効果的です。

注意点

  1. パラメータの優先順位fmt 引数で色指定(例:’r–‘ の ‘r’)を行い、同時に color 引数も指定した場合、明示的な color 引数が優先されますが、コードが混乱するため片方に統一することをお勧めします。
  2. データの整合性XとYのリストの長さは必ず一致させてください。長さが異なると ValueError が発生します。
  3. 過度な装飾マーカーサイズを大きくしすぎたり、線を太くしすぎたりすると、データが重なって読み取りにくくなります。alpha を設定して透過させることで重なりを視認しやすくできます。

バリエーション(任意)

階段状グラフ(ステッププロット)

値の変化が離散的である場合(在庫数の推移など)、通常の折れ線ではなく階段状のグラフが適しています。drawstyle 引数を使用します。

import matplotlib.pyplot as plt

def create_step_plot():
    days = [1, 2, 3, 4, 5]
    stock = [50, 50, 30, 30, 20]

    fig, ax = plt.subplots()
    
    # drawstyle='steps-post' で階段状に描画
    ax.plot(days, stock, drawstyle='steps-post', marker='o', label='Stock Level')
    
    ax.set_title("Inventory Level (Step Plot)")
    ax.legend()
    plt.show()

if __name__ == "__main__":
    create_step_plot()

まとめ

Matplotlibの plot メソッドは非常に多機能で、fmt や marker、linestyle を組み合わせることで、データの特性に合わせた表現が可能です。

特に複数の線を重ねて描画する場合は、色だけでなく線種やマーカーを変えることで、白黒印刷時や色覚多様性にも配慮したグラフを作成できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次