在堆叠条形图中过滤geom_text值标签

5
我想使用ggplot创建一个堆积条形图,并向其添加(居中的)标签:当值太低时,我不想显示标签。
df<-data.frame(x=unlist(strsplit("AAAABBBB","")),
           z=unlist(strsplit("ABCDABCD","")),
           y=c(40,5,30,10,50,60,5, 40))

# this works fine
library(ggplot2)
ggplot(df, aes(x=x, y=y, fill = z)) + geom_bar(stat="identity") + 
   geom_text(data  = df, aes(x=x, y=y, label = y), position = position_stack(vjust=0.5))

enter image description here

但是当我像下面这样过滤值时,它也会改变每个标签的位置。这对于散点图来说是可以的,但由于定位是基于堆叠值的,因此标签显示得太低。
#don't show values 5 or less
ggplot(df, aes(x=x, y=y, fill = z)) + geom_bar(stat="identity") + 
    geom_text(data = df[df$y > 5,], aes(x=x, y=y, label = y), position = 
    position_stack(vjust=0.5)) 

enter image description here

1个回答

3
我们可以创建一个名为'y1'的列,其值小于或等于5时为空白(""),并在参数中使用它。
df %>% 
     mutate(y1 = replace(y, y<=5, ""))

p2 <- ggplot(df, aes(x=x, y=y, fill = z)) + 
         geom_bar(stat="identity") + 
         geom_text(data  = df, aes(x=x, y=y, label = y1),
                  position = position_stack(vjust=0.5))
p2

这里输入图片描述


通过与原帖中的第一个图进行比较,检查位置。

p1 <- ggplot(df, aes(x=x, y=y, fill = z)) + 
                  geom_bar(stat="identity") +
                  geom_text(data  = df, aes(x=x, y=y, label = y), 
                      position = position_stack(vjust=0.5))

library(ggpubr)
ggarrange(p1, p2, ncol =2, nrow = 1, labels = c("p1", "p2"))

enter image description here


1
谢谢指出。我之前不知道有一些奇怪的问题,会尝试解决。你的解决方案非常好,但我不会创建新列,而是会像这样做:aes(label = ifelse(y > 5, y, "")) - pogibas
1
@PoGibas 我猜就是这样。我看到你在做类似的事情,所以没有改变它。 - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接