将 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)
我有三个看起来与此类似的不同数据框:
>>> 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)