我必须用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')
输出:
另外,我想给出标题的顶部和左边的图表。“这里的一些文字”是标题,黄色行显示我想要的另一个标题。想要的输出没有额外的白色空间在顶部。
发布于 2017-12-18 11:56:42
一个选项是指定表的边框作为保存图形时使用的框。
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())
发布于 2017-12-18 11:02:14
我认为你不能删除你桌子上面和下面的空格。阅读文件,您已经拥有了您将实现的最紧的。
bbox_inches : str或Bbox,可选 以英寸为单位。只保存该数字的给定部分。如果“紧”,试着找出这个数字的紧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')
我强烈建议您调整您的轴/图形设置后,,您的绘图完全绘制。
https://stackoverflow.com/questions/47866272
复制相似问题