Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将标题添加到列表或字典中的子图中?_Python_Pandas_Matplotlib_Heatmap - Fatal编程技术网

Python 如何将标题添加到列表或字典中的子图中?

Python 如何将标题添加到列表或字典中的子图中?,python,pandas,matplotlib,heatmap,Python,Pandas,Matplotlib,Heatmap,我正在编写一个代码,为不同的气象季节绘制不同的热图。我想看看不同可再生能源资源和需求之间的相关性。我创建了一个名为“core_矩阵”的列表,其中列表中的每个整数对应于不同季节的相关矩阵 目前,以我设置列表和程序的方式,我的子地块的标题有问题。当我在ax.set\u title…行中使用标题列表时,我得到一个错误:raisevalueerror(f“必须通过二维输入。shape={values.shape}”)ValueError:必须通过二维输入。形状=() 有人能帮我修一下吗 以下是我的代码副

我正在编写一个代码,为不同的气象季节绘制不同的热图。我想看看不同可再生能源资源和需求之间的相关性。我创建了一个名为“core_矩阵”的列表,其中列表中的每个整数对应于不同季节的相关矩阵

目前,以我设置列表和程序的方式,我的子地块的标题有问题。当我在
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()