gpt4 book ai didi

python - 在 Matplotlib 中设置绘图 Canvas 的大小

转载 作者:太空狗 更新时间:2023-10-29 17:07:11 27 4
gpt4 key购买 nike

我希望 Matplotlib/Pyplot 生成 Canvas 大小一致的绘图。也就是说,图形可以有不同的大小以适应轴描述,但绘图区域(绘制曲线的矩形)应始终具有相同的大小。

有没有简单的方法可以做到这一点? pyplot.figure() 的选项 figsize 似乎设置了图形的整体大小,而不是 Canvas 的大小,因此每当轴描述占用更多或更少的空间时,我都会得到不同的 Canvas 大小。

最佳答案

这是我对 Matplotlib 最大的不满之一。我经常使用栅格数据,例如我想添加颜色图、图例和一些标题。 matplotlib 库中的任何简单示例这样做都会导致不同的分辨率,因此会重新采样数据。尤其是在进行图像分析时,您不希望进行任何(不需要的)重采样。

这是我通常做的,尽管我很想知道是否有更简单或更好的方法。

让我们从加载图片并以相同的分辨率输出图片开始:

import matplotlib.pyplot as plt
import urllib2

# load the image
img = plt.imread(urllib2.urlopen('http://upload.wikimedia.org/wikipedia/en/thumb/5/56/Matplotlib_logo.svg/500px-Matplotlib_logo.svg.png'))

# get the dimensions
ypixels, xpixels, bands = img.shape

# get the size in inches
dpi = 72.
xinch = xpixels / dpi
yinch = ypixels / dpi

# plot and save in the same size as the original
fig = plt.figure(figsize=(xinch,yinch))

ax = plt.axes([0., 0., 1., 1.], frameon=False, xticks=[],yticks=[])
ax.imshow(img, interpolation='none')

plt.savefig('D:\\mpl_logo.png', dpi=dpi, transparent=True)

请注意,我手动定义了轴位置,以便跨越整个图形。

以与上述类似的方式,您可以在图像周围添加一些边距以允许标签或颜色条等。

此示例在图像上方添加了 20% 的边距,然后用于绘制标题:

fig = plt.figure(figsize=(xinch,yinch/.8))

ax = plt.axes([0., 0., 1., .8], frameon=False, xticks=[],yticks=[])
ax.imshow(img, interpolation='none')
ax.set_title('Matplotlib is fun!', size=16, weight='bold')

plt.savefig('D:\\mpl_logo_with_title.png', dpi=dpi)

因此图形的 y 尺寸(高度)增加,轴的 y 尺寸同样减小。这提供了更大的(整体)输出图像,但轴区域的大小仍然相同。

拥有像 .set_scale() 这样的图形或轴属性来强制执行真正的 1-on-x 输出可能会很好。

关于python - 在 Matplotlib 中设置绘图 Canvas 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16057869/

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