Python 在seaborn countplot中将百分比添加到条形图顶部时出现的问题

Python 在seaborn countplot中将百分比添加到条形图顶部时出现的问题,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,在countplot中,我需要在条形图的顶部添加百分比。我已经试过了邮件中给出的解决方案。但我只得到了第一个酒吧的百分比,而不是剩下的。有办法解决吗?代码片段如下所示: import pandas as pd my_data_set = pd.DataFrame({'ydata': ['N', 'N', 'N', 'N', 'N', 'N', 'Y', 'N', 'Y', 'N', 'N'], 'p_f_test': ['False', 'True', 'True

在countplot中,我需要在条形图的顶部添加百分比。我已经试过了邮件中给出的解决方案。但我只得到了第一个酒吧的百分比,而不是剩下的。有办法解决吗?代码片段如下所示:

import pandas as pd
my_data_set = pd.DataFrame({'ydata': ['N', 'N', 'N', 'N', 'N', 'N', 'Y', 'N', 'Y', 'N', 'N'], 
               'p_f_test': ['False', 'True', 'True', 'True', 'False', 'False', 'False', 'False', 'False', 'False', 'True']}) 

total = float(len(my_data_set))
ax = sns.countplot(x='p_f_test',hue='ydata',data=my_data_set)
for p in ax.patches:
    height = p.get_height()
    ax.text(p.get_x()+p.get_width()/2., height + 3, '{:1.2f}'.format(height/total), ha="center").astype(int)

在绘图中有一个没有范围的条形图,即
get\u height
is
NaN
。你需要明确地抓住那个案子。您可能想改用
0

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

my_data_set = pd.DataFrame({'ydata': ['N', 'N', 'N', 'N', 'N', 'N', 'Y', 'N', 'Y', 'N', 'N'], 
               'p_f_test': ['False', 'True', 'True', 'True', 'False', 'False', 'False', 'False', 'False', 'False', 'True']}) 

total = float(len(my_data_set))
ax = sns.countplot(x='p_f_test',hue='ydata',data=my_data_set)
for p in ax.patches:
    height = p.get_height()
    if np.isnan(height):
        height=0
    ax.text(p.get_x()+p.get_width()/2., height, '{:1.2f}'.format(height/total), ha="center")

plt.show()

我建议您首先删除
.astype(int)
,因为您无法将
matplotlib.text.text
元素转换为整数。如果删除,则会出现以下错误:
ValueError:无法将浮点NaN转换为整数。我们需要一个数据集来看看这是从哪里来的。好吧,这是一个简单的数据集:ydata p_f__测试0n错误1n正确2n正确3n正确4n错误5n错误6y错误7n错误8y错误9n错误10nTrue@ImportanceOfBeingErnest数据集好吗?谢谢。这很有帮助。是否可以通过p_f_检验得到分组百分比。也就是说,False(N+Y)加起来应该是1,True(N+Y)加起来应该是1。也就是说,假“N”的条形图应该显示0.71而不是0.45,假“Y”应该显示0.28而不是0.18。同样正确的“N”应该显示1而不是0.36这是另一个问题。通常,您可以先计算所需的任何数字,然后绘制或注释这些数字。