如何根据ggplot2中的某些条件删除标签?

问题描述

我正在参加 #duboischallenge 并参加挑战 5。

我想删除绘图上的标签“0%”。

代码(仍在学习,所以可能不是最有效的代码!):

income <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-02-16/income.csv')


data5 <- income %>%
  gather(expenses,percentage,3:7) %>%
  mutate(percentage = replace_na(percentage,0))

data5$expenses <- factor(data5$expenses,levels = c("Other","Tax","Clothes","Food","Rent"))
data5$Class <-factor(data5$Class,levels = c("Over $1000","$750-1000","$500-750","$400-500","$300-400","$200-300","$100-200"))

plot5 <-ggplot(data5,aes(x = Class,y = percentage,fill = expenses)) +
  geom_bar(position = "fill",stat = "identity")+
  scale_fill_manual(values = c("black","blueviolet","darksalmon","azure3","cornsilk3"),breaks = c("Rent","Other"))+
  geom_text(aes(x = Class,label = paste0(percentage,"%")),color = if_else(data5$expenses == "Rent","white","black"),size = 3.5,position = position_fill(vjust = 0.5)) +
  coord_flip()

enter image description here

如果我添加

geom_text(data = data5 %>% filter(percentage > 3),position = position_fill(vjust = 0.5))

我收到此错误错误:Aesthetics 必须为长度 1 或与数据相同 (32):color

如何去除“0%”标签

解决方法

您可以简单地采用与为标签着色相同的方法:

  ggplot(data5,aes(x = Class,y = percentage,fill = expenses)) +
    geom_bar(position = "fill",stat = "identity")+
    scale_fill_manual(values = c("black","blueviolet","darksalmon","azure3","cornsilk3"),breaks = c("Rent","Food","Clothes","Tax","Other"))+
    geom_text(aes(x = Class,label = ifelse(percentage > 0,paste0(percentage,"%"),"")),color = if_else(data5$expenses == "Rent","white","black"),size = 3.5,position = position_fill(vjust = 0.5)) +
    coord_flip()