R 带有ggplot scale_x_datetime的轴标签和限制

R 带有ggplot scale_x_datetime的轴标签和限制,r,ggplot2,R,Ggplot2,我想得到很好的图表,以日期、工作日和时间作为x轴标签 test <- data.frame(date=seq(as.POSIXct("2012-02-09 00:00:00",tz="CET"),as.POSIXct("2012-02-11 00:00:00",tz="CET"),"hours" ), value= runif(49) ) ggplot() + geom_line(data=test, aes(x=as.POSIXct(date), y=value)) + theme(t

我想得到很好的图表,以日期、工作日和时间作为x轴标签

test <- data.frame(date=seq(as.POSIXct("2012-02-09 00:00:00",tz="CET"),as.POSIXct("2012-02-11 00:00:00",tz="CET"),"hours" ),
value= runif(49) )

ggplot() + geom_line(data=test, aes(x=as.POSIXct(date), y=value)) +
theme(text=element_text(size=16),
legend.text=element_text(size=16), 
axis.text=element_text(size=16, colour="black"),
panel.background = element_rect(fill = 'white', colour = 'black'),
axis.title.y = element_text(size=16, vjust = 0.3), 
axis.title.x = element_text(size=16, vjust = 0),
legend.key=element_rect(fill="white")) +
scale_x_datetime( breaks = date_breaks("1 days"), labels = date_format("%a-%d\n%H:%M", tz="CET"),
,limits = c(as.POSIXct("2012-02-09 00:00:00 CET"),as.POSIXct("2012-02-11 00:00:00 CET")))

test如果创建日期时间向量并将其赋给
breaks
参数,则可以完全控制中断。下面我用
seq
完成了这项工作

设置
expand=c(0,0)
将停止ggplot,并提供额外的空间

ggplot(data = test, aes(x = as.POSIXct(date), y = value)) +
  geom_line() +
  scale_x_datetime(
    breaks = seq(as.POSIXct("2012-02-09 00:59:00 CET"),
                 as.POSIXct("2012-02-11 00:59:00 CET"), "8 hours"),
    labels = date_format("%a-%d\n%H:%M", tz = "CET"),
    expand = c(0, 0),
    limits = c(
      as.POSIXct("2012-02-09 00:00:00 CET"),
      as.POSIXct("2012-02-11 00:00:00 CET")
    )
  )

有了这个限制,我收到了一条警告消息:“删除了9行,其中包含缺少的值(geom_path)”

我使用了Richard建议的
展开
,下面是代码和图:

test <- data.frame(date=seq(as.POSIXct("2012-02-09 00:00:00",tz="CET"),as.POSIXct("2012-02-11 00:00:00",tz="CET"),"hours" ),
               value= runif(49) )

ggplot() + geom_line(data=test, aes(x=as.POSIXct(date), y=value)) +
  theme(text=element_text(size=16),
        legend.text=element_text(size=16), 
        axis.text=element_text(size=16, colour="black"),
        panel.background = element_rect(fill = 'white', colour = 'black'),
        axis.title.y = element_text(size=16, vjust = 0.3), 
        axis.title.x = element_text(size=16, vjust = 0),
        legend.key=element_rect(fill="white")) +
  scale_x_datetime( breaks = date_breaks("8 hours"), 
                    labels = date_format("%a-%d\n%H:%M", tz="CET"), 
                    expand = c(0,0))

test我的猜测是使用
expand
breaks
参数将有助于回答前两个问题。在dplyr 1.0.0中,
date\u format()。重要的是,它不是由ggplot导入的,因此必须使用长格式
scales::label_date()
test <- data.frame(date=seq(as.POSIXct("2012-02-09 00:00:00",tz="CET"),as.POSIXct("2012-02-11 00:00:00",tz="CET"),"hours" ),
               value= runif(49) )

ggplot() + geom_line(data=test, aes(x=as.POSIXct(date), y=value)) +
  theme(text=element_text(size=16),
        legend.text=element_text(size=16), 
        axis.text=element_text(size=16, colour="black"),
        panel.background = element_rect(fill = 'white', colour = 'black'),
        axis.title.y = element_text(size=16, vjust = 0.3), 
        axis.title.x = element_text(size=16, vjust = 0),
        legend.key=element_rect(fill="white")) +
  scale_x_datetime( breaks = date_breaks("8 hours"), 
                    labels = date_format("%a-%d\n%H:%M", tz="CET"), 
                    expand = c(0,0))