3秒でわかる
matplotlib で折れ線グラフを描く関数。時間とともに変わる値の動きを追ったり、複数の系列を重ねて比較したりするときに使います。
もう少し詳しく
どういうものか
plt.plot は、x の並びと y の並びを渡すと、点を順につないだ線を描く関数です。y だけを渡すと、x は 0 から始まる連番として扱われます。
import matplotlib.pyplot as plt
days = [1, 2, 3, 4, 5, 6, 7]
users = [120, 138, 131, 156, 172, 165, 190]
plt.plot(days, users, marker="o", label="訪問者")
plt.xlabel("日")
plt.legend()
plt.grid(True)
plt.show()なぜ必要か
数字が並んだ表からは、増えているのか減っているのかを読み取るのに時間がかかります。折れ線にすると、傾きと折れ方だけで傾向をつかめます。異常値も、線が急に跳ねる形で見つかります。
具体例
複数の系列を重ねると比較になります。plt.plot を続けて呼ぶだけで、同じ図に重なります。
plt.plot(days, tokyo, label="東京")
plt.plot(days, osaka, label="大阪", linestyle="--")
plt.legend()線の見分けは色だけに頼らず、linestyle や marker も変えます。印刷や色覚の差を考えると、形が違うほうが確実です。
つまずきやすいところ
x の並びが昇順になっていないと、線が行ったり来たりします。データフレームから取り出すときは、先に日付で並べ替えます。
df = df.sort_values("date")
plt.plot(df["date"], df["value"])日付を文字列のまま渡すのも詰まりどころです。pd.to_datetime で日時型に変換しておくと、目盛りが自動で整えられ、間隔も実際の日数に比例します。
欠損値がある場合、matplotlib は None や NaN のところで線を切ります。切れていることに意味があるならそのままで構いませんが、埋めたいなら描く前に補完します。
似た用語との違い
| 関数 | 使いどころ |
|---|---|
plt.plot | 時系列など、順番に意味がある連続した値 |
plt.bar | 店舗別など、順番に意味が無い分類の比較 |
plt.scatter | 2 つの量の関係を点で見たいとき |
線でつなぐという行為には「点と点の間も連続している」という主張が含まれます。分類データを線でつなぐと、読み手に無い関係を伝えてしまいます。