Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで対数スケールのグラフにマイナー目盛りラベルを表示する方法

Matplotlibで対数スケール(ログスケール)のグラフにマイナー目盛りのラベルを表示したい場合、FormatStrFormatterを使ってマイナー軸のフォーマッタを設定することで実現できます。この記事では、具体的な手順とサンプルコードをわかりやすく解説します。

実装の手順

  1. 図のサイズを設定し、サブプロット周辺の余白(パディング)を調整します。
  2. NumPyを使って xy のデータポイントを作成します。
  3. plot() メソッドで x と y のデータをプロットします。
  4. gca() メソッドで現在の軸(Axesオブジェクト)を取得します。
  5. set_yscale('log') を使ってY軸を対数スケールに設定します。
  6. tick_params() メソッドで目盛りおよび目盛りラベルの表示設定を行います。
  7. set_minor_formatter() にフォーマット文字列を指定したフォーマッタを渡し、マイナー目盛りのラベルを整形します。
  8. show() メソッドで図を表示します。

サンプルコード

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

x = np.linspace(-2, 2, 10)
y = np.exp(x)

plt.plot(x, y)

ax = plt.gca()
ax.set_yscale('log')

plt.tick_params(axis='y', which='minor')
ax.yaxis.set_minor_formatter(FormatStrFormatter("%.1f"))

plt.show()

コードのポイント解説

  • np.linspace(-2, 2, 10): −2から2までの範囲を10等分した値を生成し、それに対して指数関数 exp(x) を適用しています。指数関数的な増加は対数スケールとの相性が良いため、デモに適したデータです。
  • ax.set_yscale('log'): Y軸を対数スケールに変更します。これにより、値が大きく変動するデータでも見やすいグラフになります。
  • tick_params(axis='y', which='minor'): Y軸のマイナー目盛りに対して設定を適用することを明示しています。
  • FormatStrFormatter("%.1f"): マイナー目盛りのラベルを小数点以下1桁の形式で表示します。これにより、対数スケール上の中間的な値も読み取りやすくなります。

出力結果

上記のコードを実行すると、Y軸が対数スケールで表示され、主要な目盛り(1、10など)だけでなく、その間のマイナー目盛りにも「0.5」「2.0」のような小数ラベルが付与されたグラフが出力されます。

Matplotlibで対数スケールのグラフにマイナー目盛りラベルを表示する方法

まとめ

対数スケールのグラフは、桁違いに変化するデータを可視化する際に非常に便利です。しかし、デフォルト設定ではマイナー目盛りにラベルが表示されないため、詳細な値を読み取ることが難しい場合があります。matplotlib.ticker.FormatStrFormatterset_minor_formatter() に渡すだけで、マイナー目盛りにも任意の形式のラベルを簡単に追加できるので、ぜひ活用してみてください。

  1. Matplotlibでサブプロットの目盛りラベルの密度を下げる方法

    Matplotlibでグラフを描画する際、目盛りラベルが多すぎると表示が混雑して読みにくくなることがあります。この問題を解決するには、density(密度)変数に小さな値を設定することで、目盛りラベルの密度を下げることができます。手順目盛りの間隔を制御するための変数 density を初期化します。NumPyを使用して x および y のデータポイントを作成します。plot() メソッドを使って x と y のデータポイントをプロットします。xticks() メソッドを使用して、X軸の目盛り位置とラベルを設定します。show() メソッドで図を表示します。コード例import numpy as

  2. Matplotlibで漸近線・不連続点を含むグラフを正しく描画する方法

    はじめにMatplotlibで y = 1/x のような関数をそのままプロットすると、x = 0 付近で値が発散し、グラフ上に不自然な縦線が表示されてしまうことがあります。これは数値計算では厳密な「無限大」を扱えず、0に極めて近い大きな値として計算されるためです。本記事では、numpyとMatplotlibを組み合わせて、漸近線(不連続点)を持つ関数を見やすく描画する手順を解説します。処理の手順numpyを使ってx・yのデータポイントを作成します。plt.axis(off) で軸の表示をオフにします。plot() メソッドでx・yのデータをもとに曲線を描画します。axhline() で水平方向