繁体   English   中英

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

[英]Conditional vjust for barplot labels in 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 ..并且在那里起作用。

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

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

vec <- 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")

d <- data.frame(gender = vec)

nums <- table(d)
adj <- ifelse(nums > 15, 2, -2)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM