保存matplotlib表会产生很多空白

时间:2017-03-23 22:00:58

标签: python matplotlib save plt

我正在使用matplotlib和python 2.7来创建一些表。当我保存表格时,即使表格只有1-2行,图像也会呈现方形,当我稍后将其添加到自动生成的PDF时会产生大量空白空间。 我正在使用代码的一个例子是......

import matplotlib.pyplot as plt

t_data = ((1,2), (3,4))
table = plt.table(cellText = t_data, colLabels = ('label 1', 'label 2'), loc='center')
plt.axis('off')
plt.grid('off')
plt.savefig('test.png')

这会产生这样的图像...... You can see you can see the white space around it

奇怪的是,使用plt.show()会在GUI中生成没有空格的表。

我尝试过使用各种形式的tight_layout=True而没有运气,同时让背景变得透明(它变得透明,但仍然存在)。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

由于表是在轴内创建的,因此最终的绘图大小将取决于轴的大小。所以原则上解决方案可以是设置图形尺寸或首先设置轴尺寸,让表适应它。

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(6,1))

t_data = ((1,2), (3,4))
table = plt.table(cellText = t_data, 
                  colLabels = ('label 1', 'label 2'),
                  rowLabels = ('row 1', 'row 2'),
                  loc='center')

plt.axis('off')
plt.grid('off')

plt.savefig(__file__+'test2.png', bbox_inches="tight" )
plt.show()

enter image description here

另一个解决方案是让表格按原样绘制,并在保存之前找出表格的边界框。这样可以创建一个在桌子周围非常紧凑的图像。

import matplotlib.pyplot as plt
import matplotlib.transforms

t_data = ((1,2), (3,4))
table = plt.table(cellText = t_data, 
                  colLabels = ('label 1', 'label 2'),
                  rowLabels = ('row 1', 'row 2'),
                  loc='center')

plt.axis('off')
plt.grid('off')

#prepare for saving:
# draw canvas once
plt.gcf().canvas.draw()
# get bounding box of table
points = table.get_window_extent(plt.gcf()._cachedRenderer).get_points()
# add 10 pixel spacing
points[0,:] -= 10; points[1,:] += 10
# get new bounding box in inches
nbbox = matplotlib.transforms.Bbox.from_extents(points/plt.gcf().dpi)
# save and clip by new bounding box
plt.savefig(__file__+'test.png', bbox_inches=nbbox, )

plt.show()

enter image description here