【问题标题】:Issue in adding percentages to the top of bars in seaborn countplot在 seaborn 计数图中将百分比添加到条形顶部的问题
【发布时间】:2019-08-19 01:15:47
【问题描述】:

在计数图中,我需要在条形顶部添加百分比。我已经尝试过this 帖子中给出的解决方案。但我只得到第一个栏的百分比,而不是其余的。有什么办法可以解决吗?代码 sn-p 如下:

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)

【问题讨论】:

  • 我建议您先删除.astype(int),因为您无法将matplotlib.text.Text 元素转换为整数。
  • 如果我删除然后我得到以下错误:ValueError: cannot convert float NaN to integer
  • 有趣。需要minimal reproducible example 来查看它的来源。
  • 好吧,这是简单的数据集:ydata p_f_test 0 N False 1 N True 2 N True 3 N True 4 N False 5 N False 6 Y False 7 N False 8 Y False 9 N False 10 N True跨度>
  • @ImportanceOfBeingErnest 数据集好吗?

标签: python matplotlib seaborn


【解决方案1】:

您的绘图中有一个没有范围的条,即get_heightNaN。你需要明确地抓住这种情况。可能您想改用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()

【讨论】:

  • 谢谢。这有帮助。是否可以获得按 p_f_test 分组的百分比。 False(N + Y) 的总和应为 1,True(N + Y) 的总和应为 1。即 False 'N' 的条形应显示 0.71 而不是 0.45,而 False 'Y' 应显示 0.28而不是 0.18。同样,True 'N' 应该显示 1 而不是 0.36
  • 那是一个不同的问题。一般来说,您可以先计算所需的任何数字,然后绘制或注释这些数字。
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
相关资源
最近更新 更多