在计数图中,我需要在条形图的顶部添加百分比。我已经尝试过this帖子中给出的解决方案。但是我只获得第一个小节的百分比,而没有获得剩余的百分比。有什么办法可以解决它?代码段如下:
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)
答案 0 :(得分:1)
您的绘图中有一个没有范围的条形,即get_height
是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()