pandas 有没有办法让matplotlib图形适合matplotlib表格对象的大小?

xfb7svmp  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(158)

我正在尝试创建一个函数,它可以接收一个Pandas数据框,并为它创建一个matplotlib表格图形。传入的数据框的大小可以从1到25行,因此图形大小需要是通用的。然而,我遇到了一个问题,即图形大小和轴大小与我使用Pandas数据框创建的表格对象的大小不匹配。
到目前为止,我已经尝试了打开和关闭轴,打开和关闭图形和轴的frame属性,拖动表格的宽度和高度并调整图形的大小以匹配表格,以及使用tight_layout()。我还尝试了所有这些不同的解决方案,同时将表格放置在图形的不同位置。
下面是我的代码的当前状态:

def create_table_fig(df):
    fig = plt.figure(frameon = False)
    table = plt.table(cellText = df.values, colLabels = df.columns, fontsize = 'large', loc = 'lower left')
    table.auto_set_column_width(col=list(range(len(df.columns))))
    table.set_figure(fig)
    plt.close()
    
    return fig
data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dave'],
    'Age': [25, 30, 35, 40],
    'Salary': [50000, 60000, 70000, 80000]}
df = pd.DataFrame(data)
table = create_table_fig(df)
table

This is what I keep getting:
This is what I'm trying to get:
如果任何人有任何其他的解决方案,我可以尝试,我会非常感激。

d7v8vwbk

d7v8vwbk1#

图形的大小使用plt.子图中的figsize参数设置()。图形的高度根据数据框中的行数设置,因此每行的高度为0.4。使用ax.axis关闭轴('off '),并且使用bbox=[0,0,1,1]创建具有跨越整个图的bbox的表。调用plt.tight_layout()来调整表格和图形边缘之间的间距。

import matplotlib.pyplot as plt
import pandas as pd

def create_table_fig(df):
    fig, ax = plt.subplots(figsize=(4, len(df) * 0.4))
    ax.axis('off')
    table = ax.table(cellText=df.values, colLabels=df.columns,
                     fontsize='large', cellLoc='center', bbox=[0, 0, 1, 1])
    table.auto_set_column_width(col=list(range(len(df.columns))))
    plt.tight_layout()

    return fig

data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dave'],
        'Age': [25, 30, 35, 40],
        'Salary': [50000, 60000, 70000, 80000]}
df = pd.DataFrame(data)
table = create_table_fig(df)
plt.show()

相关问题