Python matplotlib绘图顶部和底部的空白

Python matplotlib绘图顶部和底部的空白,python,matplotlib,Python,Matplotlib,我必须用Python绘制一个表格,并将此表格保存为jpeg/png格式。然后在邮件中使用此图像。问题是我在图表的顶部和底部都有空白。我用于实现此目的的代码: nrows, ncols = len(df)+1, len(df.columns) hcell, wcell = 0.5, 1.5 hpad, wpad = 0, 0 fig, ax = plt.subplots(figsize=(ncols*wcell+wpad, nrows*hcell+hpad)) ax.axis('off')

我必须用Python绘制一个表格,并将此表格保存为jpeg/png格式。然后在邮件中使用此图像。问题是我在图表的顶部和底部都有空白。我用于实现此目的的代码:

nrows, ncols = len(df)+1, len(df.columns)
hcell, wcell = 0.5, 1.5
hpad, wpad = 0, 0  
fig, ax = plt.subplots(figsize=(ncols*wcell+wpad, nrows*hcell+hpad))

ax.axis('off')
ax.axis('tight')
ax.xaxis.set_visible(False) 
ax.yaxis.set_visible(False)

ax.table(cellText=df.values, colLabels=df.columns, loc='center')
fig.savefig('table1.png', bbox_inches='tight')
输出: 另外,我想把标题放在图表的顶部和左侧。 “此处有一些文本”是标题,黄线显示我想要另一个标题的位置。 所需输出,顶部无额外空白。

我认为您不能删除表格上方和下方的空白,你已经拥有了你所能达到的最高水平

bbox_英寸:str或bbox,可选

B以英寸为单位。仅保存图形的给定部分。如果是“紧密”,请尝试找出该图形的紧密bbox。如果没有,请使用savefig.bbox

但是,我为您正确设置的行和列制作了一个工作示例。 下图是代码

from matplotlib import pyplot as plt 

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

colums = ['col1', 'col2']
rows = ['row1', 'row2']
values = [[0, 1], [1, 0]]
ax.table(cellText=values, colLabels=colums, rowLabels=rows, loc='center')

ax.axis('off')
ax.xaxis.set_visible(False)
ax.yaxis.set_visible(False)

fig.savefig('plop.png', bbox_inches='tight')


我强烈建议您在绘图完成后调整轴/地物设置。一个选项是将表格的边界框指定为保存地物时使用的边界框

from matplotlib import pyplot as plt 

fig, ax = plt.subplots()

colums = ['col1', 'col2']
rows = ['row1', 'row2']
values = [[0, 1], [1, 0]]
table = ax.table(cellText=values, colLabels=colums, rowLabels=rows, loc='center')

ax.axis('off')

fig.canvas.draw()
bbox = table.get_window_extent(fig.canvas.get_renderer())
bbox_inches = bbox.transformed(fig.dpi_scale_trans.inverted())

fig.savefig('plop.png', bbox_inches=bbox_inches)

plt.show()

在这种情况下,外线是交叉的,因为线延伸到其位置的两侧。人们仍然可以在桌子周围添加一些填充物。例如,要有5个像素的填充

bbox = table.get_window_extent(fig.canvas.get_renderer())
bbox = bbox.from_extents(bbox.xmin-5, bbox.ymin-5, bbox.xmax+5, bbox.ymax+5)
bbox_inches = bbox.transformed(fig.dpi_scale_trans.inverted())

您可能想给我们一个工作示例,这样我们就可以重现您的案例,并对其进行处理。我给出了代码。一个人可以复制的数据。答案已经给出wtf@AyushKesarwani“一个人可以复制的数据”不是它在这里的工作方式。你提供一个答案,有人可以给出答案。如果你没有提供这样的答案,你基本上是在要求一个想要回答你问题的人不仅要解决你的问题,还要先自己写出来。这不是很好。谢谢你的回答。我会确保从下次开始遵守这一点。当然,你可以去掉空格,但是
bbox\u inches='tight'
对这个目的没有太大帮助。一旦问题出现,我很乐意提供一个答案,说明如何解决。我很想知道你会怎么做。实现这一点的唯一方法是使用实例,但我现在没有时间封装它的功能。如果您愿意直接给我发一条信息,告诉我应该研究的选项,我会很高兴。好的,我以您为例,用
bbox\u inches
作为答案。当然还有其他的选择,比如让桌子和数字一样大。