matplotlib ライブラリ

【python】matplotlibの軸を対数(log)軸に変更【補助目盛追加、底変更】

pythonのグラフ描画ライブラリ「matplotlib」において、グラフの軸を対数軸に変更する方法について紹介します。

本記事では、以下の内容を紹介します。

この記事で分かること

  • 【参考】matplotlibの2つのグラフ作成方法について(plt、axの違い)
  • グラフのx軸を対数軸に変更
  • グラフのy軸を対数軸に変更
  • 対数軸に補助目盛を追加する方法
  • 対数軸の底を変更する方法

なお、軸に関する設定については、下記の記事で詳しく紹介しています。

matplotlibの軸関連の設定まとめ

スポンサーリンク

【参考】matplotlibの2つのグラフ作成方法について(plt、axの違い)

軸を対数軸に変更する方法を紹介する前に、matplotlibのグラフ作成方法の違いについて紹介します。

matplotlibでは、2通りの方法でグラフを作成できます。

【 pyplot.~~~ 】

matplotlibのもとになった、MATLABに似たグラフ作成スタイルです。

plt.~~~ だけでいろいろできてしまうため、簡単にグラフを作成できます。
ただし、細かい調整はできないので、簡素なグラフでよい場合や、結果を早く確認したい場合などに向いています。

以下、plt.plot( )でグラフを作成するサンプルコードです。

### plt.plot()でグラフを作成
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 100)
y = np.log10(x)

plt.plot(x, y)
plt.show()

【 ax.~~~ 】

オブジェクト指向でグラフを作成する方法です。

fig, ax = plt.subplots( ) などで、Figureオブジェクト(グラフ描画領域)、Axesオブジェクト(座標軸)を作成し、個別のAxesオブジェクトに対してax.plot( )でグラフを描画します。

以下、オブジェクト指向でグラフを作成するサンプルコードです。

### オブジェクト指向でグラフを作成
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 100)
y = np.log10(x)

fig, ax = plt.subplots()

ax.plot(x, y)
plt.show()

表示されるグラフは、どちらの方法も同じです。

実行結果

matplotlibにおける、2つのグラフ描画方法の違いについては、下記の記事で紹介しています。

matplotlibのpyplot(plt)とaxの違い

スポンサーリンク

matplotlibのグラフのx軸を対数軸に変更

ここから、グラフの軸を対数軸に変更する方法について紹介していきます。

前述のとおり、matplotlibには2通りのグラフ描画方法があるため、サンプルコードもそれぞれの方法について紹介します。

はじめに、グラフのx軸を対数軸に変更する方法について、紹介します。

【pyplot.~~~ 】

plt.xscale('log') とすることで、x軸を対数軸に変更できます。

### x軸を対数軸に変更
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 100)
y = np.log10(x)

plt.plot(x, y)

plt.xscale('log')

plt.show()

【 ax.~~~ 】

ax.set_xscale('log') とすることで、x軸を対数軸に変更できます。

### x軸を対数軸に変更
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 100)
y = np.log10(x)

fig, ax = plt.subplots()

ax.plot(x, y)

ax.set_xscale('log')

plt.show()

作成されるグラフは、どちらのコードでも同じです。

実行結果

matplotlibのグラフのy軸を対数軸に変更

グラフのy軸を対数軸に変更する方法について、紹介します。

例として、指数関数のグラフのy軸を対数軸に変更します。

対数軸に変更する前のグラフはこちらになります。

### 指数関数のグラフ
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 10)
y = 2**x

plt.plot(x, y)

plt.show()

コード実行後、表示されるグラフはこちらになります。

実行結果

こちらの指数関数を例に、y軸を対数軸に変更します。

【pyplot.~~~ 】

plt.yscale('log') とすることで、y軸を対数軸に変更できます。

### y軸を対数軸に変更
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 10)
y = 2**x

plt.plot(x, y)

plt.yscale('log')

plt.show()

【 ax.~~~ 】

ax.set_yscale('log') とすることで、y軸を対数軸に変更できます。

### y軸を対数軸に変更
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 10)
y = 2**x

fig, ax = plt.subplots()

ax.plot(x, y)

ax.set_yscale('log')

plt.show()

作成されるグラフは、どちらのコードでも同じです。

実行結果

スポンサーリンク

対数軸に補助目盛を追加する方法

グラフの対数軸に、補助目盛を追加する方法について紹介します。

minorticks_on( )を記述すると、補助目盛を表示できるようになります。

grid( )で、グリッド線が表示できるようになります。
また、引数として which='major' を指定すると主目盛線について設定できます。
which='minor' を指定すると補助目盛線について設定できます。

以下、それぞれのサンプルコードです。

【pyplot.~~~ 】

### 補助目盛を追加
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 10)
y = 2**x

plt.plot(x, y)

plt.yscale('log')

plt.minorticks_on()

plt.grid(which='major',color='black',linestyle='-')
plt.grid(which='minor',color='gray',linestyle='--')

plt.show()

【 ax.~~~ 】

### 補助目盛を追加
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 10)
y = 2**x

fig, ax = plt.subplots()

ax.plot(x, y)

ax.set_yscale('log')

ax.minorticks_on()

ax.grid(which='major',color='black',linestyle='-')
ax.grid(which='minor',color='gray',linestyle='--')

plt.show()

作成されるグラフは、どちらのコードでも同じです。

実行結果

> ax.grid(which='major',color='black',linestyle='-')
> ax.grid(which='minor',color='gray',linestyle='--')

グリッド線を表示しています。
引数 which = 'major' で主目盛線を設定しています。線の色は黒を指定しています。
引数 which = 'minor' で補助目盛線を設定しています。線の色は灰色を指定し、線は点線を指定しています。

対数軸の底を変更する方法

グラフの対数軸にの底を変更する方法について紹介します。

yscale( )の引数に、base = を指定すると、底を変更できるようになります。

以下、それぞれのサンプルコードです。

【 pyplot.~~~ 】

### 対数軸の底を変更
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 10)
y = 2**x

plt.plot(x, y)

plt.yscale('log', base = 2)

plt.show()

【 ax.~~~ 】

### 対数軸の底を変更
import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(1, 10)
y = 2**x

fig, ax = plt.subplots()

ax.plot(x, y)

ax.set_yscale('log', base = 2)

plt.show()

作成されるグラフは、どちらのコードでも同じです。

実行結果

> ax.set_yscale('log', base = 2)

引数 base = 2 を指定し、目盛の底を2にしています。

スポンサーリンク

-matplotlib, ライブラリ
-,