🪶

matplotlib個人的によく使う設定内容

に公開

1. はじめに

  • matplotlibで個人的によく使う設定やテンプレートを記載する
  • 個人的にはplt.を連打するより、キーワード引数で何とかするほうが好きです
  • 会社で広告だらけの個人サイトを覗くのがイヤになったため、まとめました
    (最近、いかがわしい広告の表示が増えた気がする...)

正直matplotlibについては、以下の記事が最強だと思う。
引数やメソッドについては、下記の記事で検索したほうが分かりやすいです
https://qiita.com/nkay/items/d1eb91e33b9d6469ef51

それか、公式リファレンスを参照するほうが確実
以下は、引数colorで指定可能な色の名称一覧
https://matplotlib.org/stable/gallery/color/named_colors.html

環境

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