首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Matplotlib中设置绘图画布的大小

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

Stack Overflow用户
提问于 2013-04-17 18:39:30
回答 2查看 39.4K关注 0票数 20

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-17 21:41:46

这是我对Matplotlib最大的不满之一。我经常处理栅格数据,例如,我想要添加一个色彩映射表、图例和一些标题。matplotlib库中的任何简单示例这样做都会导致不同的分辨率,从而重新采样数据。特别是在做图像分析时,你不想要任何(不想要的)重采样。

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

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

代码语言:javascript
复制
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%的边距,然后用于打印标题:

代码语言:javascript
复制
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-size (高度)增加,而轴的y-size同样减小。这将提供更大的(整体)输出图像,但轴区域仍将保持相同的大小。

有一个像.set_scale()这样的图形或轴属性来强制实现真正的1对x输出可能会更好。

票数 20
EN

Stack Overflow用户

发布于 2018-09-04 07:06:24

您可以在Matplotlib rc中指定以下设置:

代码语言:javascript
复制
import matplotlib
matplotlib.rcParams['figure.figsize'] = [10, 10] # for square canvas
matplotlib.rcParams['figure.subplot.left'] = 0
matplotlib.rcParams['figure.subplot.bottom'] = 0
matplotlib.rcParams['figure.subplot.right'] = 1
matplotlib.rcParams['figure.subplot.top'] = 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16057869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档