ページ

2025年6月2日月曜日

matploblibの軸の表示設定備忘録


背景

matplotlibとはグラフの描画ができるpythonのライブラリです。
値を描画する際の軸の表示設定を忘れた頃に見返したくなる気がするので、記事に関連情報を残します。

使ったもの

python 3.10.12
matplotlib 3.10.1
numpy 2.2.2

描画試験対象xが0から5πのsin波とy=x/5π

この記事では下記の記述で生成するxが0~5πの区間とsin波とy=x/5πの線を例にして描画領域を設定します。

#!/usr/bin/python
import matplotlib.pyplot as plt
import numpy as np

x_sin = np.arange(0, 5*np.pi, 0.1)
y_sin = np.sin(x_sin)

x_line = [0,5*np.pi]
y_line = [0,1]

plt.plot(x_sin, y_sin, color="green")
plt.plot(x_line, y_line, color="black")

plt.show()

上記の処理を実行するとこうなります。


軸の表示の正と負を入れ替える gca().invert_xaxis()

showの前にinvert_xxisやinvert_yaxisを呼べば、x軸やy軸の正と負を入れ替えれます。
plt.gca().invert_xaxis()
plt.show()


参考:
How to set the axis limits in Matplotlib?
matplotlib.axes.Axes.invert_xaxis

描画範囲を制限する set_xlim

set_xlimやset_ylimを使うと、描画領域を制限できます。
plt.gca().set_xlim([2.5*np.pi, 5*np.pi])
plt.gca().set_ylim([0, 1])
plt.show()


set_lim関数に大きい値から先に渡せば、軸の正と負を入れ替えた表示も可能です。
plt.gca().set_xlim([5*np.pi, 2.5*np.pi])
plt.gca().set_ylim([0, 1])
plt.show()


参考:
How to set the axis limits in Matplotlib?
matplotlib.pyplot.axis

x軸とy軸を入れ替える: 良い方法求む

自分がさがした探した範囲ではplot済みの値のx軸とy軸を入れ替えて描画する方法は見つからなかったです。
flip関数の実装が検討されたgithubの履歴を見つけはしましたが、それに関する機能追加はされてなさそうでした。
Axis swapping method? #6569

何か良い方法をご存知でしたら教えていただけると嬉しいです。

plot済みの要素の入れ替え方法は不明ですが、plotで描画するx軸とy軸の要素を入れ替えればx軸とy軸を入れ替えれます。
# plt.plot(x_sin, y_sin, color="green")
# plt.plot(x_line, y_line, color="black")
plt.plot(y_sin, x_sin, color="green")
plt.plot(y_line, x_line, color="black")
plt.show()


参考:
Axis swapping method? #6569

表示の比率を固定する: set_aspect

matplotlibの比率制御はautoが標準設定なので、画面の大きさに合わせて自動で比率が変更されます。
表示可能な領域を最大限に活用するならautoが良いのですが、x軸とy軸を特定の比率で見たい場合はマウスで画面の縦横比をそれらしく合わせる手間が発生します。
一度だけなら良いですが、プログラムを何度も実行する場合は毎回マウス操作が手間です。
そんなときはset_aspectで期待する比率で描画する設定にしておくと楽です。

x軸とy軸の比率を1:1でグラフを見たいときはset_aspectでequalを設定します。
plt.gca().set_aspect('equal')
plt.show()


特定の比率で描画したい場合はset_aspectに「x軸の単位/y軸の単位」を渡します。
plt.gca().set_aspect(4/1)
plt.show()


参考:
How can I set the aspect ratio?

おわり

matplotlibでグラフ描画時の軸の正と負の向きや比率の設定を把握しました。

0 件のコメント :

コメントを投稿