子绘图不正确,matplotlib

子绘图不正确,matplotlib,matplotlib,subplot,Matplotlib,Subplot,我想有一个2x2的网格,每个网格是8乘以3个相邻的条。 这是因为我有四个评估参数,每个评估参数评估三种模型的8种语言的质量 我能画出其中一个,但对我的绘图网格中的其他三个不起作用 目前看来: flair、bert和roberta这三个列表代表了数据,他们在每次迭代中都正确地列出了一个包含八个浮点的列表,但除此之外,我不知道布局有什么问题。我会尝试axes=np.flatte(axes),完全去掉count,然后对于n,在enumerate(val\u list)中求值元素:…ax=轴[n]。这

我想有一个2x2的网格,每个网格是8乘以3个相邻的条。 这是因为我有四个评估参数,每个评估参数评估三种模型的8种语言的质量

我能画出其中一个,但对我的绘图网格中的其他三个不起作用

目前看来:


flair、bert和roberta这三个列表代表了数据,他们在每次迭代中都正确地列出了一个包含八个浮点的列表,但除此之外,我不知道布局有什么问题。

我会尝试
axes=np.flatte(axes)
,完全去掉
count
,然后
对于n,在enumerate(val\u list)中求值元素:…
ax=轴[n]
。这样,您就不用担心轴列表的2D方面了。然后,去掉所有基于
plt.
的函数,将
ax.
放在所有地方。从循环中删除
plt.show()
,并在循环后添加
fig.show()
。我会抛出
bar\u-kwargs=dict(width=0.2,align='center')
ax.bar(…,…,**bar\u-kwargs)
,因为这些参数在所有条之间共享。np.flatte命令的意思是什么?它告诉我numpy没有这样一个命令(虽然我知道,它一定存在)其余的是可以理解的,谢谢你的反馈和bar_kwargsAh的想法是我的错,
flatten
是一个
ndarray
方法,而不是一个模块函数
axes=np.array(axes).flatten()
。它将
[[ax0,ax1],[ax2,ax3]
转换为
[ax0,ax1,ax2,ax3]
,这样迭代就更容易了。我会尝试
轴=np.展平(轴)
,完全去掉
计数
,然后
为n,在枚举(valu列表)中求值元素:…
。这样,您就不用担心轴列表的2D方面了。然后,去掉所有基于
plt.
的函数,将
ax.
放在所有地方。从循环中删除
plt.show()
,并在循环后添加
fig.show()
。我会抛出
bar\u-kwargs=dict(width=0.2,align='center')
ax.bar(…,…,**bar\u-kwargs)
,因为这些参数在所有条之间共享。np.flatte命令的意思是什么?它告诉我numpy没有这样一个命令(虽然我知道,它一定存在)其余的是可以理解的,谢谢你的反馈和bar_kwargsAh的想法是我的错,
flatten
是一个
ndarray
方法,而不是一个模块函数
axes=np.array(axes).flatten()
。它将
[[ax0,ax1],[ax2,ax3]
转换为
[ax0,ax1,ax2,ax3]
,以便更容易进行迭代。
eval_list = ["F1-Werte (micro)", "Precision", "Recall", "Accuracy"]
lang_list = ["Alle Sprachen", "Chinesisch", "Deutsch", "Englisch", "Finnisch", "Französisch", "Italienisch", "Spanisch"]

x = np.arange(start=1, stop=9, step=1)


fig, axes = plt.subplots(2, 2, figsize=(10,10), sharex=False)
df_list = list()
count = 0
for eval_elem in eval_list:
    flair = list()
    bert = list()
    roberta = list()

    for lang in lang_list:
        flair.append(dfBest.query("Eval==@eval_elem").query("Lang==@lang").query("Model=='multiflair'").iloc[0]['Average'])
        bert.append(dfBest.query("Eval==@eval_elem").query("Lang==@lang").query("Model=='bert'").iloc[0]['Average'])
        roberta.append(dfBest.query("Eval==@eval_elem").query("Lang==@lang").query("Model=='roberta'").iloc[0]['Average'])
    
    #ax = plt.subplot(2,2,count+1)
    
    a = 1 if count > 1 else 0
    b = 1 if count%2!=0 else 0
    
    axes[a][b].bar(x-0.2, flair, width=0.2, color='b', align='center')
    axes[a][b].bar(x, bert, width=0.2, color='g', align='center')
    axes[a][b].bar(x+0.2, roberta, width=0.2, color='r', align='center')

    plt.xticks(x, lang_list, rotation=90)
    plt.title(eval_list[count])
    plt.legend(bbox_to_anchor=(1.1, 1), labels=["multiflair", "bert", "roberta"])
    plt.show()
    count += 1