私はあなたの質問からあなたが何を望んでいるのかよくわかりません。
すべてのプロットに同じデータ制限を設定しますか?
その場合は、共有軸を使用します(subplots
ここでは使用していますが、MATLABスタイルのコードに固執する場合は回避できます)。
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(nrows=2, ncols=2, sharey=True, sharex=True)
for i, ax in enumerate(axes.flat, start=1):
ax.set(aspect=1)
ax.plot(np.arange(0, i * 4, i))
plt.show()
それらすべてに軸の制限を共有させたいが、adjustable='box'
(つまり、非正方形の軸の境界を)持たせたい場合は、次を使用しますadjustable='box-forced'
。
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(nrows=2, ncols=2, sharey=True, sharex=True)
for i, ax in enumerate(axes.flat, start=1):
ax.set(aspect=1, adjustable='box-forced', xticks=range(i))
ax.plot(np.arange(0, i * 4, i))
plt.show()
編集:申し訳ありませんが、私はまだ少し混乱しています。このようなものが欲しいですか?
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(nrows=2, ncols=2)
for i, ax in enumerate(axes.flat, start=1):
ax.set(adjustable='datalim', aspect=1)
ax.plot(np.arange(0, i * 4, i))
plt.show()
さて、私は最終的にあなたの質問を理解したと思います。私たちは両方とも「アスペクト比」によってまったく異なることを意味しました。
matplotlibでは、プロットのアスペクト比はデータ制限の相対的なスケールを参照します。つまり、プロットのアスペクト比が1の場合、傾きが1の線が45度で表示されます。アスペクト比は、軸にプロットされたデータではなく、軸の輪郭に適用されると想定していました。
サブプロットの輪郭を正方形にしたいだけです。(この場合、matplotlibで定義されているように、すべてのアスペクト比が異なります。)
その場合、正方形の図形が必要です。(他の方法もありますが、正方形の図形を作成する方がはるかに簡単です。Matplotlib軸は、図形のサイズに比例するスペースを埋めます。)
import matplotlib.pyplot as plt
import numpy as np
# The key here is the figsize (it needs to be square). The position and size of
# axes in matplotlib are defined relative to the size of the figure.
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8,8))
for i, ax in enumerate(axes.flat, start=1):
ax.plot(np.arange(0, i * 4, i))
# By default, subplots leave a bit of room for tick labels on the left.
# We'll remove it so that the axes are perfectly square.
fig.subplots_adjust(left=0.1)
plt.show()