R ggplot2中条形图标签的条件调整

时间:2019-01-06 16:10:32

标签: r ggplot2

我有一个Excel文件,其中包含有关不同性别的数据。我正在用read.csv阅读它。我正在使用ggplot绘制该数据的条形图。

这是数据:

> dput(dat.absolventen$Geschlecht)
structure(c(1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("männlich", 
"weiblich"), class = "factor")

这是我的代码:

ggplot(data = d, aes(x=Geschlecht,y=(..count..)/sum(..count..))) +
  geom_bar(
            fill="steelblue"
           ) +
  geom_text(aes(label = sprintf("%0.1f%%",(..count..)/sum(..count..)*100)), 
            stat = "count", 
            colour = "white",
            vjust = +2,
            fontface = "bold"               
            )

这给了我足够好的图表。有9位女性和32位男性。 我可以了解一下每个条形图中的百分比。但是,我想显示栏内男性的百分比,栏外或不在栏顶部的女性百分比(基本上,如果栏太短,则将标签移到外面)。

我知道我可以使用ifelse(),但我不知道如何将其用于每个值,即男性和女性的总数。如果在定义aes(label = ...)时使用ifelse(),则将条件应用于整个列。我希望它测试每个酒吧,即男性和女性,然后根据小于或大于15的标准进行调整。

我尝试使用

ifelse(..count.. >15, -2, +2)

但是这给了我'..count .. not found'的错误。而且我不确定为什么会这样说,因为在定义美学时,我使用的是..count ..并且在那里起作用。

以前有很多类似的问题,但是我一直无法从他们那里得到任何帮助,这就是为什么我不得不再次询问这个特殊情况的原因。问候。

1 个答案:

答案 0 :(得分:2)

我认为,这个问题是您只能在aes()内部访问..count..。您无法将其传递给调整,因为它尚未定义。这是一个hacky解决方案。基本上,我根据分组因子表找出ggplot之外的调整,将其称为ListView.builder,并将该信息提供给ggplot。

adj