メインコンテンツへスキップ

Matplotlibのオブジェクト指向な対数軸プロット

·1012 文字·3 分
目次

はじめに
#

matplotlibライブラリで作成したグラフの軸を、オブジェクト指向スタイルで対数に変更する。 オブジェクト指向によるグラフの描画は、複数のグラフをプロットしたときに、どのグラフの描画を調整しているか分かりやすいという利点がある。

環境
#

ソフトウェア バージョン
Spyder 3.2.8
Python 3.6.5
matplotlib 2.2.2

本記事では、各ライブラリを以下のようにインポートしていることを前提とする。

import numpy as np
import matplotlib.pyplot as plt

対数軸のプロット
#

x, y軸をそれぞれ対数でプロットするには、Axesオブジェクトのset_xscale, set_yscaleメソッドを用いる。

Axes.set_xscale(scale, **kargs)
Axes.set_yscale(scale, **kargs)

scaleはプロットの方法であり、str型として以下のいずれかから指定する。 "linear", "log", "symlog""logit"も指定できるが、公式のリファレンスに詳細が記載されていないため本記事では扱わない)

また、**kargsは各scaleの詳細を指定する任意の引数である。

通常の線形プロット(linear)
#

scale="linear"とすると、通常の線形プロットになる。

一般的な対数プロット(log)
#

scale="log"とすると、一般的な対数プロットになる。オプションは以下の通り。

  • basex/basey: x, y軸の対数の「底」。デフォルトの底は10。
  • nonposx/nonposy: 0以下の値を、"mask"とすると表示せず、"clip"とすると微小な正の数に変換する。
  • subsx/subsy: 小目盛り (subticks) を振る値を整数のリストで指定する。

例:x軸の対数の底を2とし、y軸の小目盛りを2と5だけにする。また、0要素を除く。

x = np.arange(10) # 0, 1, 2, ..., 9の配列
y = np.arange(10)

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xscale("log", basex=2, nonposx="mask")
ax.set_yscale("log", subsy=[2, 5])
plt.show()

実行結果

xscale_log
xscale_log

正負両方の対数プロット(symlog)
#

scale="symlog"とすると、正負両方の数を対数でプロットできる。すなわち、以下の数式のように、負の数を一度正にして対数をとり再びマイナスを付ける。

$$ \begin{cases} \log(x) & (x > 0) \\\ -\log(-x) & (x < 0) \end{cases} $$

オプションは以下の通り。

  • basex/basey: x, y軸の対数の「底」。デフォルトの底は10。
  • linthreshx/linthreshy: 実数xを与えると、範囲(-x, x)で線形にプロットする。ゼロ周辺における対数の発散を防ぐ。
  • subsx/subsy: 小目盛り (subticks) を振る値を整数のリストで指定する。

例:y軸を正負ともに対数でプロットする。範囲(-1, 1)を線形にする。

x = np.arange(-10, 10) # -10, -9, ..., 10の配列
y = np.arange(-10, 10)

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_yscale("symlog", linthreshy=1)
ax.grid()
plt.show()

結果

xscale_symlog
xscale_symlog

参考
#

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

Matplotlibでオブジェクト指向なグラフの調整
·2791 文字·6 分
matplotlibライブラリで作成したグラフをオブジェクト指向スタイルで調整する。
Matplotlibでオブジェクト指向なグラフ作成
·1842 文字·4 分
matplotlibライブラリを用いてオブジェクト指向スタイルでグラフを作成する。
PandasのSeriesとDataFrameの作成
·1427 文字·3 分
Pandasの基本データ構造であるSeriesとDataFrameの作成方法について述べる。
Pythonのmultiprocessingを使った並列計算
·456 文字·1 分
Pythonの標準ライブラリmultiprocessingを使って並列計算を行う。
BeautifulSoupを使ったXMLの解析
·2390 文字·5 分
BeautifulSoupを使ってXMLを解析(parse)する。
NumPyで使える統計の関数
·673 文字·2 分
NumPyで利用できる統計の関数について。