gpt4 book ai didi

python - 具有各种 y 轴的子图中的纵横比

转载 作者:太空狗 更新时间:2023-10-29 20:50:14 27 4
gpt4 key购买 nike

我想用下面的代码生成 4 个相同大小的子图,并在我设置的 x 轴和 y 轴大小之间具有共同的纵横比。引用下面的例子,我希望所有的子图看起来都像第一个(左上角)。现在的问题是 y 轴的大小与其最大值相关。这是我想避免的行为。

import matplotlib.pyplot as plt
import numpy as np

def main():

fig = plt.figure(1, [5.5, 3])
for i in range(1,5):
fig.add_subplot(221+i-1, adjustable='box', aspect=1)
plt.plot(np.arange(0,(i)*4,i))

plt.show()

if __name__ == "__main__":
main()

令人惊讶的是,matplotlib 默认生成正确的东西(下图):

   import  matplotlib.pyplot as plt 
import numpy as np

def main():
fig = plt.figure(1, [5.5, 3])
for i in range(1,5):
fig.add_subplot(221+i-1)
plt.plot(np.arange(0,(i)*4,i))
plt.show()

我只想添加一个功能来控制 x 轴和 y 轴长度之间的纵横比。

Here is what I am looking for:

最佳答案

我不太清楚你想从你的问题中得到什么。

您是否希望所有图都具有相同的数据限制?

如果是这样,使用共享轴(我在这里使用 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()

enter image description here

如果您希望它们都共享它们的轴限制,但要有 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()

enter image description here


编辑:抱歉,我还是有点糊涂。你想要这样的东西吗?

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()

enter image description here


好吧,我想我终于明白你的问题了。我们都用“宽高比”表示完全不同的东西。

在 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()

enter image description here

关于python - 具有各种 y 轴的子图中的纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14907062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com