Matplotlib で軸が等しい正方形のプロットを作成する方法
Suraj Joshi
2023年1月30日
Matplotlib
Matplotlib Axes
set_aspect() メソッドを使用してプロットのアスペクト比を設定し、それを正方形のプロットにすることができます。また、axis() メソッドを使用して、Matplotlib で軸が等しい正方形のプロットを作成することもできます。
set_aspect() を用いて等軸の正方形のプロットを作成する
matplotlib.axes.Axes.set_aspect() 関数を使用してアスペクト比を設定できます。関数の縦横比として "equal" を使用すると、データポイントから X 軸と Y 軸のプロット単位まで同じスケーリングのプロットが得られます。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 100)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(x, y)
plt.xlim(-3, 3)
plt.ylim(-3, 3)
ax.set_aspect("equal", adjustable="box")
plt.xlabel("x")
plt.ylabel("sinx")
plt.show()

plt.xlim(-3, 3)
plt.ylim(-3, 3)
ax.set_aspect("equal")
X 軸と Y 軸の両方が同じ範囲になるように設定します。次に、ax.set_aspect('equal') は両方の軸を等しく設定します。
上記の方法では、両方の軸の範囲が同じに設定されている場合にのみ正方形のプロットが生成されます。一般的なケースで正方形のプロットを生成するには、次のコマンドを使用して手動でアスペクト比を設定する必要があります。
axes.set_aspect(1.0 / axes.get_data_ratio())
axes.get_data_ratio() は生のプロットデータの比率を取得します。その逆数の値は set_aspect() に渡され、軸の制限を手動で設定せずに軸を等しくします。
コード:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 100)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(x, y)
ax.set_aspect(1.0 / ax.get_data_ratio(), adjustable="box")
plt.xlabel("x")
plt.ylabel("sinx")
plt.show()

正方形のプロットを生成する axis() メソッド
"square"を matplotlib.pyplot.axis() の引数として渡すと、正方形のプロットが作成されますここで、両方の軸の範囲は、プロットの長さと同じです。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 100)
y = np.sin(x)
plt.plot(x, y)
plt.axis("square")
plt.xlabel("x")
plt.ylabel("sinx")
plt.show()

Warning
このソリューションの軸の範囲は自動的に選択されます。
ax.set_aspect('equal', adjustable='datalim') と同じです。ユーザーが設定した明示的な軸の制限は考慮されません。
チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
著者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn