我如何在 seaborn (countplot) 中添加图例

how can I add legend in seaborn (countplot)

enter image description here 我正在尝试在此计数图中添加图例。不知道问题出在哪里?为什么它不起作用。有没有兄弟帮我解决这个问题?

ax=sns.countplot(x='Tomatoe types', data=df)    
ax.set_title('Tomatoe types',fontsize = 18, fontweight='bold', color='white')    
ax.set_xlabel('types', fontsize = 15, color='white')    
ax.set_ylabel('count', fontsize = 15, color='white')    
ax.legend(labels = ['Bad', 'Fresh', 'Finest']) 
for i in ax.patches:    
     ax.text(i.get_x()+i.get_width()/2, i.get_height()+0.75, i.get_height(),  
     horizontalalignment='center',size=14)

您可以通过传递所需标签的列表来手动添加图例,如下所示:

plt.legend(labels = ['type 1', 'type 2'])

这里有一个很好的博客 post 关于这个主题: https://www.delftstack.com/howto/seaborn/legend-seaborn-plot/

最简单的方法是使用 hue=x= 相同的变量。您需要设置 dodge=False,因为默认情况下会为每个 x - 色调组合保留一个位置。

from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

df = pd.DataFrame({'Tomato types': np.random.choice(['bad', 'fresh', 'finest'], 200, p=[.1, .4, .5])})

ax = sns.countplot(x='Tomato types', hue='Tomato types', dodge=False, data=df)
ax.set_title('Tomato types', fontsize=18, fontweight='bold', color='white')
ax.set_xlabel('types', fontsize=15, color='white')
ax.set_ylabel('count', fontsize=15, color='white')
ax.figure.set_facecolor('0.3')

plt.tight_layout()
plt.show()

请注意,当您不使用 hue 时,不会添加图例,因为名称和颜色由 x 刻度标签给出。