我不能完全说出你想要从你的问题中得到什么。
您是否希望所有图都具有相同的数据限制?
如果是这样,请使用共享轴(我在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()