gpt4 book ai didi

python - 使用 matplotlib imshow 和 scatter 获得相同的子图大小

转载 作者:太空狗 更新时间:2023-10-29 16:53:51 26 4
gpt4 key购买 nike

我正在尝试在同一图中绘制图像(使用 matplotlib.imshow)和散点图。尝试这样做时,图像看起来比散点图小。小示例代码如下所示:

import matplotlib.pyplot as plt
import numpy as np

image = np.random.randint(100,200,(200,200))
x = np.arange(0,10,0.1)
y = np.sin(x)

fig, (ax1, ax2) = plt.subplots(1,2)
ax1.imshow(image)
ax2.scatter(x,y)

plt.show()

其中给出了下图:

enter image description here

如何让两个子盆具有相同的高度? (和我想的宽度)

我试过使用 gridspec如图this回答:

fig=plt.figure()
gs=GridSpec(1,2)

ax1=fig.add_subplot(gs[0,0])
ax2=fig.add_subplot(gs[0,1])
ax1.imshow(image)
ax2.scatter(x,y)

但这给出了相同的结果。我还尝试使用以下方法手动调整子图大小:

fig = plt.figure()
ax1 = plt.axes([0.05,0.05,0.45,0.9])
ax2 = plt.axes([0.55,0.19,0.45,0.62])

ax1.imshow(image)
ax2.scatter(x,y)

通过反复试验,我可以将两个子图调整到正确的大小,尽管总体图形大小的任何变化都意味着子图的大小将不再相同。

有没有办法让 imshow散点图 在图中显示相同的大小,而无需手动更改轴的大小?

我正在使用 Python 2.7 和 matplotlib 2.0.0

最佳答案

您并不完全清楚您想要的结果是什么。

  1. 您可以在图像上使用自动方面

    ax.imshow(z, aspect="auto")

    enter image description here

  2. 或者您可以根据其轴限制设置线图的方面,使其与图像大小相同(如果图像具有相同的 x 和 y 大小)

    asp = np.diff(ax2.get_xlim())[0] / np.diff(ax2.get_ylim())[0]
    ax2.set_aspect(asp)

    enter image description here完整代码:

    import numpy as np
    import matplotlib.pyplot as plt

    x = np.linspace(0,10,20)
    y = np.sin(x)
    z = np.random.rand(100,100)

    fig, (ax, ax2) = plt.subplots(ncols=2)

    ax.imshow(z)
    ax2.plot(x,y, marker=".")

    asp = np.diff(ax2.get_xlim())[0] / np.diff(ax2.get_ylim())[0]
    ax2.set_aspect(asp)

    plt.show()

    如果图像没有等边(不是正方形),还需要按图像的纵横比进行划分:

    asp = np.diff(ax2.get_xlim())[0] / np.diff(ax2.get_ylim())[0]
    asp /= np.abs(np.diff(ax1.get_xlim())[0] / np.diff(ax1.get_ylim())[0])
    ax2.set_aspect(asp)
  3. 更复杂的解决方案:

    • This answer用于使用子图参数来实现某个方面。

    • 如果您想使用 mpl_toolkits 并亲自动手,this answer会是一本好书。

关于python - 使用 matplotlib imshow 和 scatter 获得相同的子图大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44654421/

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