在Matplotlib中设置绘图画布的大小

在Matplotlib中设置绘图画布的大小,第1张

在Matplotlib中设置绘图画布的大小

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

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

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

import matplotlib.pyplot as pltimport urllib2# load the imageimg = plt.imread(urllib2.urlopen('http://upload.wikimedia.org/wikipedia/en/thumb/5/56/Matplotlib_logo.svg/500px-Matplotlib_logo.svg.png'))# get the dimensionsypixels, xpixels, bands = img.shape# get the size in inchesdpi = 72.xinch = xpixels / dpiyinch = ypixels / dpi# plot and save in the same size as the originalfig = 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输出可能会很好。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5647308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存