如何使用matplotlib定义图中子图的尺寸(以英寸为单位)?

3
我的图形尺寸为figsize=(10,10),其中包含一个子图。如何定义子图的尺寸为8英寸W x 8英寸H,而不受所显示子图数据范围的影响?
编辑:我正在寻找这个问题的原因是我正在尝试创建一些用于出版的图表。因此,我需要我的图表具有固定的宽度和高度,以便能够无缝地插入到稿件中。
以下是简化的代码:
map_size = [8,8]
fig, ax = plt.subplots(1,1,figsize=map_size)
ax.plot(data)
fig.savefig('img.png', dpi=300,)  # figure is the desired size, subplot seems to be scaled to fit to fig

如果您的图形中的子图分别占据宽度和高度的 (80, 80)%,那么这是否符合您的预期?或者您想让子图占用8英寸的宽度和高度,而不考虑图形的大小? - ypx
1
不论图形大小如何,我希望子图的尺寸保持恒定。当然,为了容纳任何标签,整个图形会比子图更大。 - user528025
可能是 https://dev59.com/P4Hba4cB1Zd3GeqPTqDB 的重复问题。 - fouronnes
@user528025 一个选项是将子图定义为独立的图形,并以英寸为单位设置其大小,然后将其作为子图插入到“主”图中。如何将matplotlib Figure对象包含为subplot? - ypx
1个回答

4

一种选择是使用fig.subplots_adjust来设置子图在图中的大小。参数leftrightbottomtop是总图尺寸的分数单位。因此,在一个10x10的图中有一个8x8的子图,right - left = 0.8等等:

import matplotlib.pyplot as plt

fig=plt.figure(figsize=(10.,10.))
fig.subplots_adjust(left=0.1,right=0.9,bottom=0.1,top=0.9)

ax=fig.add_subplot(111)

这样做的话,如果你改变图像尺寸,就必须手动更改左边、右边、底部和顶部的值。我想你可以将这个计算程序化到你的代码中:
import matplotlib.pyplot as plt

subplotsize=[8.,8.]
figuresize=[10.,10.]   

left = 0.5*(1.-subplotsize[0]/figuresize[0])
right = 1.-left
bottom = 0.5*(1.-subplotsize[1]/figuresize[1])
top = 1.-bottom

fig=plt.figure(figsize=(figuresize[0],figuresize[1]))
fig.subplots_adjust(left=left,right=right,bottom=bottom,top=top)

ax=fig.add_subplot(111)

subplots_adjust方法中的left、right、bottom和top单位是什么? - user528025
3
它们是总尺寸的分数单位。 - FredL
是的,正如@FredL所指出的那样,它们是图形的分数单位。我已经编辑了答案以澄清这一点。 - tmdavison
如果只有一个子图,hspace或wspace参数是否会产生任何影响? - user528025
1
不,它们定义了两个或多个子图之间的空间(hspace=高度,wspace=宽度)。 - tmdavison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接