将图例添加到条形图 (R ggplot)
adding legend to a bar plot (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))
结果如我所愿,but how do I add a legend to this?
然后我试着把我的数据转长:
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")
I don't want it separate like that
ggplot(data_long,aes(x = `age group`, y = `rate`, fill = `dose`)) +
geom_col(position = position_stack(reverse = T))
but this comes out stacked, and I don't want it to be over 100%
有什么想法吗?
提前致谢!
这应该可以满足您的要求:
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-03-31
我正在尝试为我的条形图添加图例,但没有成功。 这就是我的数据:三列,首先是一个带有组名的因素,然后是两个名为“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))
结果如我所愿,but how do I add a legend to this?
然后我试着把我的数据转长:
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")
I don't want it separate like that
ggplot(data_long,aes(x = `age group`, y = `rate`, fill = `dose`)) +
geom_col(position = position_stack(reverse = T))
but this comes out stacked, and I don't want it to be over 100%
有什么想法吗? 提前致谢!
这应该可以满足您的要求:
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-03-31