我正在努力处理matplotlib中的图边距。我使用下面的代码来生成我的图表:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
然而,我得到的输出数字在图的两边都有大量的空白。我已经搜索了谷歌并阅读了matplotlib文档,但我似乎找不到如何减少这一点。
我正在努力处理matplotlib中的图边距。我使用下面的代码来生成我的图表:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
然而,我得到的输出数字在图的两边都有大量的空白。我已经搜索了谷歌并阅读了matplotlib文档,但我似乎找不到如何减少这一点。
当前回答
你可以使用subplots_adjust()函数来调整matplotlib图的间距:
import matplotlib.pyplot as plt
plt.plot(whatever)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
这既适用于屏幕上的图形,也适用于保存到文件中的图形,即使在一个图形上没有多个图形,也可以调用这个函数。
这些数字是图形尺寸的分数,并且需要调整以允许图形标签。
其他回答
你可以使用subplots_adjust()函数来调整matplotlib图的间距:
import matplotlib.pyplot as plt
plt.plot(whatever)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
这既适用于屏幕上的图形,也适用于保存到文件中的图形,即使在一个图形上没有多个图形,也可以调用这个函数。
这些数字是图形尺寸的分数,并且需要调整以允许图形标签。
如果有人想知道如何在应用plt.tight_layout()或fig.tight_layout()后消除其余的白色边距:使用参数pad(默认为1.08),你可以使它更紧凑: “图形边缘和子图边缘之间的填充,作为字体大小的一部分。” 例如,
plt.tight_layout(pad=0.05)
会把利润降低到很小的程度。放0对我没用,因为它使子图的方框也被切断了一点。
受到sammy回答的启发:
margins = { # vvv margin in inches
"left" : 1.5 / figsize[0],
"bottom" : 0.8 / figsize[1],
"right" : 1 - 0.3 / figsize[0],
"top" : 1 - 1 / figsize[1]
}
fig.subplots_adjust(**margins)
其中figsize是在fig = pyplot.figure(figsize=…)中使用的元组。
plt.savefig("circle.png", bbox_inches='tight',pad_inches=-1)
你所需要的就是
plt.tight_layout()
在输出之前。
除了减少页边距外,这还将所有子图之间的空间紧密分组:
x = [1,2,3]
y = [1,4,9]
import matplotlib.pyplot as plt
fig = plt.figure()
subplot1 = fig.add_subplot(121)
subplot1.plot(x,y)
subplot2 = fig.add_subplot(122)
subplot2.plot(y,x)
fig.tight_layout()
plt.show()