将图例添加到条形图R ggplot

问题描述

我正在尝试向条形图中添加图例,但没有成功。 这是我的数据的样子:三列,首先是一个带有组名的因子,然后是两个名为“1st_dose”和“2nd_dose”的数字(这些是该年龄组的疫苗接种率)。

我的数据:

structure(list(`age group` = structure(1:9,.Label = c("10-19","20-29","30-39","40-49","50-59","60-69","70-79","80-89","90+"),class = "factor"),`1st_dose` = c(20.9,72.8,77.4,82.2,87.1,88.6,97.2,94.5,97.3),`2nd_dose` = c(17.7,62.8,69.1,75.4,80.9,84,93.6,90.6,91.6)),row.names = c(NA,-9L),class = c("tbl_df","tbl","data.frame"))

我制作的第一张图就是用这个代码

ggplot(data)+geom_bar(aes(x=`age group`,y = `1st_dose`),stat = "identity")+
  geom_bar(aes(x=`age group`,y = `2nd_dose`),stat = "identity",fill="skyblue",alpha = 0.5)+
  ylab("percent")+ggtitle("Vaccination rate by age group \n Israel") +
  theme_bw()+theme(plot.title = element_text(hjust = 0.5)) 

这正是我想要的,Why are my basic Heroku apps taking two seconds to load?

然后我试图把我的数据变长:

data_long <- data %>% pivot_longer(cols = c(`1st_dose`,`2nd_dose`),names_to = "dose",values_to = "rate") 

并尝试了两种带有图例的图表变体,但看起来也不是我想要的样子:

ggplot(data_long,aes(x = `age group`,y = `rate`,fill = `dose`)) +
  geom_col(position = "dodge")

but how do I add a legend to this?

ggplot(data_long,fill = `dose`)) +
  geom_col(position = position_stack(reverse = T))

I don't want it separate like that

有什么想法吗? 提前致谢!

解决方法

这应该可以满足您的要求:

library(tidyr)
library(ggplot2)

data1 <- 
  data %>% 
  pivot_longer(-`age group`)
  

ggplot(data1)+
  geom_col(aes(x=`age group`,y = value,fill = name),position = position_dodge(width = 0,preserve = "total"),width = 1.5,alpha = 0.5)+
  scale_fill_manual(values = c("gray10","skyblue"))+
  labs(x = "Age",y = "Percent",fill = "Dose")+
  ggtitle("Vaccination rate by age group \n Israel") +
  theme_bw()+
  theme(plot.title = element_text(hjust = 0.5)) 

reprex package (v1.0.0) 于 2021 年 3 月 31 日创建