如何将DataFrame保存为无坐标轴图片?bbox_inches无效问题
解决Matplotlib保存DataFrame表格图片时下方多余空白的问题
问题描述
用Matplotlib将Pandas DataFrame生成的表格保存为图片时,已隐藏坐标轴,但表格下方仍存在多余空白,使用bbox_inches='tight'和pad_inches=0参数无法消除该空白。
解决方法
方法1:调整子图布局,让子图占满画布
默认subplot(111)会预留边距空间,即使隐藏坐标轴也无法填满画布。改用add_axes创建完全覆盖画布的子图,从根源消除多余边距:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.table import table df = { 'Trace' :['Mediaan'], 'Max afstand(mm)' :[1], 'Aantal staven' :[2], 'Gem HOH(mm)' :[3], 'Min C(mm)' :[4], 'Max C(mm)' :[5], 'Gem C(mm)' :[6] } Data = pd.DataFrame(df) fig1 = plt.figure(figsize=(8, 8), dpi=220) # 创建占满整个画布的子图,参数为[左, 下, 宽, 高],范围0-1 ax1 = fig1.add_axes([0, 0, 1, 1]) ax1.yaxis.set_visible(False) ax1.xaxis.set_visible(False) ax1.set_frame_on(False) # 隐藏子图边框 # 绘制表格,设置居中布局 tbl = table(ax1, Data, loc='center') # 可自定义表格字体大小 tbl.auto_set_font_size(False) tbl.set_fontsize(12) # 保存图片 fig1.savefig('Mediaan/'+csvfiles[i]+'_TraceMediaantabel.jpg', bbox_inches='tight', pad_inches=0) plt.close(fig1)
方法2:根据表格实际尺寸调整画布大小
获取表格的边界框,将画布大小设置为刚好包裹表格,彻底消除空白:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.table import table df = { 'Trace' :['Mediaan'], 'Max afstand(mm)' :[1], 'Aantal staven' :[2], 'Gem HOH(mm)' :[3], 'Min C(mm)' :[4], 'Max C(mm)' :[5], 'Gem C(mm)' :[6] } Data = pd.DataFrame(df) fig1 = plt.figure(figsize=(8, 8), dpi=220) ax1 = plt.subplot(111, frame_on=False) ax1.yaxis.set_visible(False) ax1.xaxis.set_visible(False) # 绘制表格 tbl = table(ax1, Data, loc='best') # 刷新画布以获取准确的表格边界 fig1.canvas.draw() # 获取表格的边界框并转换为图形坐标 bbox = tbl.get_window_extent().transformed(fig1.dpi_scale_trans.inverted()) # 将画布大小设置为表格的实际尺寸 fig1.set_size_inches(bbox.width, bbox.height) # 保存图片 fig1.savefig('Mediaan/'+csvfiles[i]+'_TraceMediaantabel.jpg', bbox_inches='tight', pad_inches=0) plt.close(fig1)
方法3:直接使用Pandas Style保存图片(推荐)
跳过Matplotlib子图布局的麻烦,用Pandas内置的style.to_image()直接生成图片,代码更简洁:
import pandas as pd df = { 'Trace' :['Mediaan'], 'Max afstand(mm)' :[1], 'Aantal staven' :[2], 'Gem HOH(mm)' :[3], 'Min C(mm)' :[4], 'Max C(mm)' :[5], 'Gem C(mm)' :[6] } Data = pd.DataFrame(df) # 设置表格样式(可选,比如添加边框) style = Data.style.set_table_styles([ {'selector': 'table', 'props': [('border-collapse', 'collapse')]}, {'selector': 'th, td', 'props': [('border', '1px solid black'), ('padding', '8px')]} ]) # 保存为图片 style.to_image('Mediaan/'+csvfiles[i]+'_TraceMediaantabel.jpg', dpi=220)
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

