问题描述
我正在尝试向条形图中添加图例,但没有成功。 这是我的数据的样子:三列,首先是一个带有组名的因子,然后是两个名为“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 日创建