问题描述
我正在参加 #duboischallenge 并参加挑战 5。
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()
geom_text(data = data5 %>% filter(percentage > 3),position = position_fill(vjust = 0.5))
我收到此错误: 错误:Aesthetics 必须为长度 1 或与数据相同 (32):color
解决方法
您可以简单地采用与为标签着色相同的方法:
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()