在时间序列可视化中结合 geom_bar、geom_segment 和 facet_grid

问题描述

我正在尝试用 ggplot 制作一个漂亮的图表,但我仍然面临一个障碍。 当我在代码末尾使用 facet_grid 时,会发生一些错误。伸出援助之手就好了!

这是我的代码

# Package
library(ggplot2)
# Function
firstup <- function(x) {
  x <- tolower(x)
  substr(x,1,1) <- toupper(substr(x,1))
  x
}

创建数据

data_F = data.frame(DATE = seq(as.Date('2020-01-21'),as.Date('2020-03-06'),by = 'days'),NB = sample(1:20,46,replace=TRUE))

管理数据

data_F = data.frame(DATE = data_F$DATE,year = as.numeric(format(data_F$DATE,format = "%Y")),month = as.factor(format(data_F$DATE,format = "%B")),days = as.numeric(format(data_F$DATE,format = "%d")),NB = data_F$NB)

按正确顺序重新调整月份

data_F$month = as.factor(firstup(data_F$month))
data_F$month = factor(data_F$month,unique(data_F$month))
month = factor(data_F$month,unique(data_F$month))
month = unique(month)
month = as.factor(month)

主线剧情

plot1 = ggplot(data_F,aes(x=DATE,y=NB)) +
  geom_bar(stat = "identity",colour="black",fill = "dodgerblue3",width=0.5) +
  scale_x_date(breaks = data_F$DATE,labels = data_F$days,minor_breaks = NULL,expand = expansion(add = 0.3))+
  scale_y_continuous(limits = c(0,65),breaks = seq(0,65,by = 5),minor_breaks = seq(0,by = 1))
plot1

创建段数据

data.segm = data.frame(x=data_F$DATE,y=Inf,xend = data_F$DATE,yend=-Inf,month=data_F$month)

显示两天,例如在第 6 行和第 35 行

i = 6

plot1 = plot1 + geom_segment(data = data.segm,aes_string(x=data.segm$x[[i]],y=data.segm$y[[i]],xend=data.segm$xend[[i]],yend=data.segm$yend[[i]]),colour = alpha("gray90",0.5),size=8,inherit.aes = F)

i = 35

plot1 = plot1 + geom_segment(data = data.segm,inherit.aes = F)

plot1

了解我的 facet_grid 问题

plot2 = plot1 + facet_grid(.~month,space="free_x",scales="free_x",switch="x")

plot2

乔纳斯

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)