for循环中函数的子图

Subplot from function in a for loop

我正在尝试生成一个带有我通过 seaborn 获得的热图的子图。当我尝试创建子图时,我得到一个带有三个空框的图形,然后是热图。我一直无法弄清楚如何将地图分配给盒子。这是我的代码:

def plot_cf_mat(matrix, save, figure_name):
    fig, ax = plt.subplots()
    ax = sns.heatmap(matrix/np.sum(matrix), annot=True, fmt = '.2%', cmap=sns.light_palette((.376, .051, .224)))
    #ax.set_title('Confusion Matrix\n\n');
    ax.set_xlabel('\nPredicted Values')
    ax.set_ylabel('Actual Values ');

    ## Ticket labels - List must be in alphabetical order
    ax.xaxis.set_ticklabels(['False','True'])
    ax.yaxis.set_ticklabels(['False','True'])
    
    if save:
        plt.savefig("".join(["cf_mat_", figure_name, ".jpg"]), bbox_inches='tight')

    return ax

#Plot
fig, axes = plt.subplots(1, 3)
i = 0
for row in axes:
    fun.plot_cf_mat(matrix = cf_mat_x_clssifr[i][-1], save = False, figure_name = None)
    i+=1
plt.show()

这是我得到的

您没有将创建的轴传递给您的函数或 sns.heatmap。将行传递给您的函数(注意 ax=row 部分):

#Plot
fig, axes = plt.subplots(1, 3)
i = 0
for row in axes:
    fun.plot_cf_mat(matrix = cf_mat_x_clssifr[i][-1], save = False, figure_name = None, ax=row)
    i+=1
plt.show()

现在在该 ax 对象上绘制热图(注意函数中的 ax 参数并将对象传递给 sns.heatmap):

def plot_cf_mat(matrix, save, figure_name, ax=None):
    ax = ax or plt.gca()
    # fig, ax = plt.subplots()
    ax = sns.heatmap(matrix/np.sum(matrix), annot=True, fmt = '.2%', cmap=sns.light_palette((.376, .051, .224)), ax=ax)