目次
概要
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() メソッドでグラフの見た目を制御する主要なパラメータです。
| パラメータ | 説明 | 設定例 |
| x | X軸のデータ(省略時はインデックスが使用される)。 | [0, 1, 2] |
| y | Y軸のデータ。必須。 | [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' (バツ) |
fmtとlinestyle: 線種はlinestyle='--'のように明示的に書くことも、fmt引数で'--'と書くことも可能です。- マーカーの強調: マーカーを目立たせたい場合は、
markersize(サイズ)やmarkeredgecolor(マーカーの枠線色)も併せて調整すると効果的です。
注意点
- パラメータの優先順位fmt 引数で色指定(例:’r–‘ の ‘r’)を行い、同時に color 引数も指定した場合、明示的な color 引数が優先されますが、コードが混乱するため片方に統一することをお勧めします。
- データの整合性XとYのリストの長さは必ず一致させてください。長さが異なると ValueError が発生します。
- 過度な装飾マーカーサイズを大きくしすぎたり、線を太くしすぎたりすると、データが重なって読み取りにくくなります。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 を組み合わせることで、データの特性に合わせた表現が可能です。
特に複数の線を重ねて描画する場合は、色だけでなく線種やマーカーを変えることで、白黒印刷時や色覚多様性にも配慮したグラフを作成できます。
