matplotlib個人的によく使う設定内容
1. はじめに
- matplotlibで個人的によく使う設定やテンプレートを記載する
- 個人的にはplt.を連打するより、キーワード引数で何とかするほうが好きです
- 会社で広告だらけの個人サイトを覗くのがイヤになったため、まとめました
(最近、いかがわしい広告の表示が増えた気がする...)
正直matplotlibについては、以下の記事が最強だと思う。
引数やメソッドについては、下記の記事で検索したほうが分かりやすいです
それか、公式リファレンスを参照するほうが確実
以下は、引数colorで指定可能な色の名称一覧
環境
PC
- OS : Windows 11 Home
python
- Python : 3.13.5
- matplotlib : 3.10.3
2. 論より証拠
2.1 出力グラフ
これをベースに紹介します(プログラムは後ろに記載)
2.2 プログラム
例によって例のごとく、いきなりプログラムを張り付けるスタイル
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "Meiryo" # フォントを指定
from matplotlib.ticker import MultipleLocator # 不要なら使わない
from matplotlib.dates import DateFormatter
import pandas as pd
import numpy as np
data = pd.DataFrame({"X": np.random.random(100)},
index=pd.date_range(start="2025/01/01", periods=100, freq="1D"))
print(data)
print(data.index)
fig = plt.figure(figsize=(9, 6), dpi=100, layout="tight",
facecolor="lightskyblue",
edgecolor="#FDB5BB", linewidth=20)
fig.suptitle("figure.suptitle") # figure上部に表示する文字列
ax = fig.add_subplot(111, title="Meiryoなら日本語が記載できる",
xlim=(data.index[0], data.index[-1]), xlabel="hoge",
ylim=(0, 1), ylabel="moge"
)
ax.plot(data.index, data["X"],
marker="*", ms=10, c="blue", label="star"
)
ax.axvspan(xmin=data.index[50], xmax=data.index[70], color="red", alpha=0.2, label="Anomarly Area") # 指定範囲を塗りつぶし
ax.axvline(data.index[60], color='red', linestyle='--') # 指定のx座標の縦線を描画
# 目盛り軸の表示設定
ax.xaxis.set_major_formatter(DateFormatter("%m/%d")) # 表示形式を指定できる
ax.xaxis.set_major_locator(MultipleLocator(7)) # 7毎に主目盛り
ax.xaxis.set_minor_locator(MultipleLocator(1)) # 1毎に補助
ax.grid(True) # grid線を描画
ax.legend(title="fuga", loc="upper left") # 凡例の表示
fig.tight_layout() # 描画してからもう一度呼ぶとよい
fig.savefig("figure.png") # 画像ファイルとして保存
fig.clf() # 次の描画前にclearしておく(この後描画しないなら不要)
2.3 一応解説
import は省略します
plt.rcParams["font.family"] = "Meiryo"
フォントを「Meiryo」に指定しています
Meiryoは日本語対応なので、日本語を使用する場合は、最初にフォントを指定するとよい
plt.figure
fig(図)を作成する
引数 | 説明 |
---|---|
figsize | 図の大きさを指定[tuple] |
dpi | 描画の細かさの指定 |
layout | tightを指定すると、title等の文字が重なりずらくなる |
facecolor | 図の枠外の色 |
edgecolor | 画像の外枠の色。linewidthを指定しないと描画されないため注意!実はカラーコードでの指定もできます! |
linewidth | edgecolorの枠の太さ。デフォルトはNone |
fig.suptitle
図の上部に文字を表示したい場合に使用
複数のグラフをsubplot等で描画する際に、それらの上位カテゴリを表示しておくとよい
fig.add_subplot
図(fig)に付箋(axes)を追加する
引数 | 説明 |
---|---|
title | 付箋上部に表示する文字列を指定 |
xlim | x軸の描画範囲 |
xlabel | x軸下部に表示する文字 |
ax.plot
折れ線グラフを描画する
引数 | 説明 |
---|---|
marker | 付箋上部に表示する文字列を指定 |
ms | marker_sizeの略。マーカーの大きさを指定する |
c | 描画する線の色を指定 |
label | legendで表示される名称を任意指定 |
ax.axvspan
図中の指定範囲を塗りつぶす
例えば異常検知やクラス分類のタスクの際に、時系列を考慮して確認したいとき
視覚的・直感的にわかりやすいので使います
ax.axvline
図中の指定位置に縦線を描画する
故障した時刻とかに線を入れておくと、分析時にわかりやすい
y軸のほうはaxhlineで設定できる
こっちは、超えてはいけない閾値とかの描画に使える
ax.xaxis.set_major_formatter(DateFormatter("%m/%d"))
pandasのTimestampやdatetimeの表示設定ができる
単純にxticklabels等でlabelをlistやdictで設定してもよいが、一応覚えておくと便利
(inportが増えるのが、イヤなのですが...)
ちなみに、xlimの範囲を明示的に指定しないと、処理がめっちゃ重くなります!!
ax.xaxis.set_major_locator
x軸の主目盛りの間隔を指定する
未指定でもmatplotlibは間隔を自動調整してくれるため、
上司等の指示があったら直す程度でよい気がします
(inportが増えるのが、イヤ...)
ax.xaxis.set_minor_locator(
x軸の補助目盛りの間隔を指定する
ax.grid
図中にグリッド線(灰色ドット線)を描画する
基本、あったほうが良い(というか、デフォルトでアリにしてほしい...)
ax.legend
凡例を表示する
titleで最上部に表示する文字列(カテゴリなど)を、
locで左上など表示位置を固定できる(未指定だと、いい感じの場所を自動判断して記載する)
plotやaxvline等の描画時に、引数labelに指定した名称が描画される
fig.tight_layout
plt.figureで指定済みだが、再度tight_layoutで呼ぶと重なりが減ることがある
fig.savefig
現在の描画情報をそのまま画像ファイルとして保存する
fig.clf
もしfor文などで描画を繰り返す場合、重なって描画されてしまうことがある
figureをclearすればよいため、clfを使う(axexをクリアするclaもある)
3. まとめ
- matplotlibは雑に使って可視化しても十分だと思いますが、
細かい設定を覚えると、かなり報告用に耐えうる体裁を整えることができる - 評価試験の結果グラフなども、自動的に生成されるようにすると、
再評価のたびにグラフ作成の手間が減るため、特徴量検討やモデル学習の試行回数を増やせる
(評価回数が増えると、手作業でまとめるのが億劫になる...ならない?) - レイアウトや色の使い分け等を駆使して、グラフ1枚で必要な情報を詰め込んでおくとよい
見ただけで直感的に伝わるようなレイアウトを心がけたい
Discussion