将 dataframe-variable-name 作为 seaborn 图表的标题

Give dataframe-variable-name as title of seaborn chart

我有三个看起来与此类似的不同数据框:

>>> a    b   c    d
aa  0.1  0.2  0.4  0.8
bb  0.3  0.5  0.9  0.5
cc  0.4  0.2  0.4  0.3
dd  0.8  0.1  0.3  0.4

3 个数据帧之间的唯一区别是给定的数字。

我正在为每个数据帧创建 for 循环热图。我想根据 df 名称给每个热图不同的标题,例如 df1、df2 和 df3。这就是我尝试这样做的方式(我已经删除了中间的计算,因为它们不相关):

dfs=[df1,df2,df3]

for dfx in dfx:
    #calculations.......

    fix,ax=plt.subplots(figsize=(12,6))
    cmap = plt.get_cmap('Greens_r',5)
    cmap.set_over('lightgrey')# colour valued l
    sns.set(rc={'figure.figsize':(10.7,10.27)})

#Create the heatmap, set title with string of df)

    sns.heatmap(str(dfs),square=True,cmap=cmap,vmin=0.001,vmax=0.051,linewidths=.5,cbar_kws= 
    {"shrink": 0.8}).set_title(str(dfx),fontsize=20,pad=20)
    plt.tick_params(axis='x', which='major', labelsize=14, labelbottom = False, bottom=False, top = 
    False, labeltop=True)
    plt.xticks(rotation=70)

很明显 .set_title(str(dfx),fontsize=20,pad=20) 只是给了我整个数据框作为标题中的字符串而不是df 的名称(第一个图表为 df1,第二个图表为 df2)。

我看到了这个 post Get the name of a pandas DataFrame 但从它看来似乎不可能将变量名作为字符串获取。

我的最终目标是能够根据数据帧变量名称为三个图(例如 df1、df2、df3)中的每一个赋予不同的标题

所以 python 总体上与您的提议完全相反。不幸的是,将变量名用作字符串非常棘手。但是,您可以使用数据帧字典(而不是数据帧列表来获得相同的结果)。

dfs={"df1": df1, "df2": df2, "df3": df3}

for name, dfx in dfx.items():
    #calculations.......

    fix,ax=plt.subplots(figsize=(12,6))
    cmap = plt.get_cmap('Greens_r',5)
    cmap.set_over('lightgrey')# colour valued l
    sns.set(rc={'figure.figsize':(10.7,10.27)})

#Create the heatmap, set title with string of df)

  sns.heatmap(dfx,square=True,cmap=cmap,vmin=0.001,vmax=0.051,linewidths=.5,cbar_kws= 
    {"shrink": 0.8}).set_title(name, fontsize=20,pad=20)
    plt.tick_params(axis='x', which='major', labelsize=14, labelbottom = False, bottom=False, top = 
    False, labeltop=True)
    plt.xticks(rotation=70)