gpt4 book ai didi

python - Matplotlib:获取子图以填充图形

转载 作者:太空狗 更新时间:2023-10-30 00:40:34 25 4
gpt4 key购买 nike

我想就如何在将图像绘制为子图时覆盖默认的 matplotlib 行为提出建议,子图大小似乎与图形大小不匹配。我想设置我的图形大小(例如匹配 A4 页面的宽度)并让子图自动拉伸(stretch)以填充可用空间。在下面的示例中,下面的代码给出了一个面板之间有很多空白的图形:

import numpy as np
import matplotlib.pyplot as plt

data=np.random.rand(10,4)

#creating a wide figure with 2 subplots in 1 row
fig,ax=plt.subplots(1,2, figsize=(9,3))
ax=ax.reshape(1,len(ax))

for i in [0,1]:
plt.sca(ax[0,i])
plt.imshow(data,interpolation='nearest')
plt.colorbar()

我希望子图水平拉伸(stretch),以便它们填充图形空间。我将沿每个轴制作许多具有不同数量值的类似图,并且图之间的空间似乎取决于 x 值与 y 值的比率,所以我想知道是否有一个好的通用设置方法填充空间的子图宽度。可以以某种方式指定子图的物理大小吗?几个小时以来,我一直在寻找解决方案,因此在此先感谢您提供的任何帮助。

最佳答案

您可以使用 ax.set_position 方法调整轴区域。它使用相对坐标,所以如果你想制作一张 A4 图像,那么:

import numpy as np
import matplotlib.pyplot as plt

# figsize keyword talks some obscure units which need a conversion from standard units
plt.figure(figsize=np.array([210,297]) / 25.4)

x = np.linspace(0,2*np.pi, 100)
plt.plot(x, np.sin(x))

plt.gca().set_position([0, 0, 1, 1])

plt.show()

现在轴区域(绘图区域)填满了整个页面。

提供给 set_position 的坐标是相对坐标 [left, lower, width, height],其中每个方向都按页面大小缩放。

正如其他答案中所指出的,imshowmatshow 有时会尝试将像素保持在图片正方形中。轴比和 imshow 有一个相当特殊的相互作用。

  • 如果调用 imshow 时没有使用 extent=[...]aspect='auto' 关键字参数,它会按照指示执行在本地默认情况下,通常会尝试保持像素正方形
  • 如果发生这种情况(或设置了 aspect='equal'),轴的行为就像调用了 plt.axis('scaled') 一样,即保持X 和 Y 坐标长度相等(每单位像素)并更改轴大小以匹配范围
  • 这可以通过设置 plt.axis('tight') 来覆盖(这使得 x 和 y 限制完全适合图像)

旧技巧是使用 axis('auto')axis('normal'),但现在已弃用(使用 scaled code>、equaltight)。

是的,有点乱。

关于python - Matplotlib:获取子图以填充图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24535393/

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