使用ggplot2将条形图中的多个条形分组

时间:2019-11-01 19:27:56

标签: r ggplot2

我目前有一个条形图,其中每个条形的高度对应于一周内某个变量的值,而连续的条形对应于连续的周。但是,我想按月标记x轴。这是我心目中的模型:

mock-up

一些注意事项:

  • 在此模型中,每个月正好包含四个小节。实际上,情况并非如此,一个酒吧可能会在两个月之间分配。
  • “ Now”月份以及“ Now”一词都以粗体显示。
  • “过去”月份的条形比“现在”月份的条形更细。

所以我的主要问题是如何将x轴分组为几个月,如模型中所示。其次,如果有人想用标有“过去”和“现在”的双箭头以及不均匀的条形宽度来帮助我,那将是很棒的。

如果有人要使用以下代码,其中包含伪数据:

library("ggplot2")
weeks <- c("06/01/2019", "06/01/2019", "06/08/2019", "06/08/2019", "06/15/2019", "06/15/2019", "06/22/2019", "06/22/2019", "06/29/2019", "06/29/2019", "07/06/2019", "07/06/2019", "07/13/2019", "07/13/2019", "07/20/2019", "07/20/2019", "07/27/2019", "07/27/2019", "08/03/2019", "08/03/2019", "08/10/2019", "08/10/2019", "08/17/2019", "08/17/2019", "08/24/2019", "08/24/2019", "08/31/2019", "08/31/2019")
values <- c(29, 10, 27, 20, 36, 2, 23, 4, 17, 16, 20, 13, 27, 10, 29, 1, 26, 0, 19, 20, 27, 4, 16, 1, 10, 10, 10, 10)
types <- c("Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful")
df <- data.frame(Week=weeks, Value=values, Type=types)
p <- ggplot(data=df, aes(x=Week, y=Value, fill=Type))
p <- p + geom_bar(stat="identity")
p <- p + scale_fill_manual(values=c("Successful"="#89EEA8", "Unsuccessful"="#FE8081"))
p <- p + theme(axis.text.x = element_text(angle=90, hjust=1))

1 个答案:

答案 0 :(得分:1)

您正在寻找的是这种东西吗?我认为您最大的问题是,您的Week变量是字符而不是日期。


library("ggplot2")
weeks <- c("06/01/2019", "06/01/2019", "06/08/2019", "06/08/2019", "06/15/2019", "06/15/2019", "06/22/2019", "06/22/2019", "06/29/2019", "06/29/2019", "07/06/2019", "07/06/2019", "07/13/2019", "07/13/2019", "07/20/2019", "07/20/2019", "07/27/2019", "07/27/2019", "08/03/2019", "08/03/2019", "08/10/2019", "08/10/2019", "08/17/2019", "08/17/2019", "08/24/2019", "08/24/2019", "08/31/2019", "08/31/2019")
values <- c(29, 10, 27, 20, 36, 2, 23, 4, 17, 16, 20, 13, 27, 10, 29, 1, 26, 0, 19, 20, 27, 4, 16, 1, 10, 10, 10, 10)
types <- c("Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful", "Successful", "Unsuccessful")
df <- data.frame(Week=lubridate::date(as.POSIXct(weeks, format = "%m/%d/%Y")), Value=values, Type=types)
p <- ggplot(data=df, aes(x=Week, y=Value, fill=Type))
p <- p + geom_bar(stat="identity")
p <- p + scale_fill_manual(values=c("Successful"="#89EEA8", "Unsuccessful"="#FE8081"))
p <- p + theme(axis.text.x = element_text(angle=90, hjust=1))
p + scale_x_date()

相关问题