Python 如何将标题添加到列表或字典中的子图中?
我正在编写一个代码,为不同的气象季节绘制不同的热图。我想看看不同可再生能源资源和需求之间的相关性。我创建了一个名为“core_矩阵”的列表,其中列表中的每个整数对应于不同季节的相关矩阵 目前,以我设置列表和程序的方式,我的子地块的标题有问题。当我在Python 如何将标题添加到列表或字典中的子图中?,python,pandas,matplotlib,heatmap,Python,Pandas,Matplotlib,Heatmap,我正在编写一个代码,为不同的气象季节绘制不同的热图。我想看看不同可再生能源资源和需求之间的相关性。我创建了一个名为“core_矩阵”的列表,其中列表中的每个整数对应于不同季节的相关矩阵 目前,以我设置列表和程序的方式,我的子地块的标题有问题。当我在ax.set\u title…行中使用标题列表时,我得到一个错误:raisevalueerror(f“必须通过二维输入。shape={values.shape}”)ValueError:必须通过二维输入。形状=() 有人能帮我修一下吗 以下是我的代码副
ax.set\u title…
行中使用标题列表时,我得到一个错误:raisevalueerror(f“必须通过二维输入。shape={values.shape}”)ValueError:必须通过二维输入。形状=()
有人能帮我修一下吗
以下是我的代码副本:
#load df and prepare data
df=pd.read_excel("df3_demand_cfs.xlsx", header=0,index_col=0)
df=df.drop_duplicates(subset="Dates")
df['del_dates']=df["Dates"]
df=df.set_index("Dates")
#####
df.drop(columns=["demand_MWh","hour","monthday",'month'],axis=1,inplace=True)
df=df.rename(columns={"wind capacity":'OnSW',"solar capacity":"Solar","osw capacity":"OSW","norm_demand":'Demand'})
df.sort_index(inplace = True)
# In[3]:
mon=[*range(0,17)]
dates=[*range(0,17)]
orr_matrix=[*range(0,17)]
corr_matrix_list=["JF 15", 'MAM','JJA','SON','DJF 15/16','MAM','JJA','SON','DJF 16/17','MAM','JJA','SON','DJF 17/18','MAM','JJA','SON','D 18']
#mon[0] = pd.DataFrame(df.loc['2015-01':'2015-02'])
mon[0] = df.loc['2015-01':'2015-02']
mon[1] = df.loc['2015-03':'2015-05']
mon[2] = df.loc['2015-06':'2015-08']
mon[3] = df.loc['2015-09':'2015-11']
mon[4] = df.loc['2015-12':'2016-02']
mon[5] = df.loc['2016-03':'2016-05']
mon[6] = df.loc['2016-06':'2016-08']
mon[7] = df.loc['2016-09':'2016-11']
mon[8] = df.loc['2016-12':'2017-02']
mon[9] = df.loc['2016-03':'2017-05']
mon[10] = df.loc['2016-06':'2017-08']
mon[11] = df.loc['2016-09':'2017-11']
mon[12] = df.loc['2017-12':'2018-02']
mon[13] = df.loc['2018-03':'2018-05']
mon[14] = df.loc['2018-06':'2018-08']
mon[15] = df.loc['2018-09':'2018-11']
mon[16] = df.loc['2018-12':'2019-02']
# In[4]:
for i in range(len(mon)):
mon[i]=mon[i].drop(columns=['del_dates'],axis=1)
corr_matrix[i] = mon[i].corr(method="spearman")
corr_matrix[i] = corr_matrix[i].round(2)
# In[5]:
fs1=10
# plt.rcParams["font.family"] = "Helvetica"
font_title = {'family': 'serif',
'color': 'black',
'weight': 'bold',
'size': fs1,
}
font_label = {'family': 'serif',
'color': 'black',
'weight': 'bold',
'size': fs1,
}
fs2=14
plt.rc('xtick', labelsize=fs2)
plt.rc('ytick', labelsize=fs2)
plt.rcParams["font.family"] = "serif"
fig, axes = plt.subplots(nrows=4, ncols=4, figsize=(25,15))
for i,ax in enumerate(axes.flatten()):
ax.set_title(i, fontsize = fs1, loc='center',fontdict=font_title)
sns.heatmap(corr_matrix_list[i],
ax=ax,
annot=True,
linewidth=.01,
square=True,
annot_kws={"size": 16},
vmin=-1,
vmax=1,
cmap="RdBu")
ax.tick_params(axis='y', labelrotation=0)
ax.tick_params(axis='x', labelrotation=45)
#plt.tight_layout()
plt.tight_layout(1,1,1)
plt.savefig('heatmaps_monthly.png')
plt.show()
我回答了我自己的问题!虽然我不知道为什么这样解决了这个问题,也不知道最初是哪里出了问题 我补充说
axes=axes.flatte()
我用for循环更改了行:对于I,枚举中的ax(轴):
因此,我的代码的最后一部分如下所示:
fig, axes = plt.subplots(nrows=4, ncols=4, figsize=(25,15))
axes=axes.flatten()
for i,ax in enumerate(axes):
ax.set_title(str(corr_matrix_list[i]), fontsize = fs1, loc='center',fontdict=font_title)
sns.heatmap(corr_matrix[i],
ax=ax,
annot=True,
linewidth=.01,
square=True,
annot_kws={"size": 16},
vmin=-1,
vmax=1,
cmap="RdBu")
ax.tick_params(axis='y', labelrotation=0)
ax.tick_params(axis='x', labelrotation=45)
#plt.tight_layout()
plt.tight_layout(1,1,1)
plt.savefig('heatmaps_monthly.png')
plt.show()