2016-08-15 103 views
3

我想用日期,工作日和时间作为x轴标签获得很好的图形。ggplot的轴标签和极限值scale_x_datetime

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"))) 

包括scale_x_datetime为包含在它看起来像这样的MWE:enter image description here

有几个问题/问题:

1)我怎样才能去除左,右的空白手边?定义限制()并不成功。

2)如何设置显示的时间(小时),换句话说,标签放置在哪个时间戳?

3)当我改变时间戳这样

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

所得积(S)仍然显示以00分钟时间戳记。有没有办法改变这个?

+1

我的猜测是使用'expand'和'breaks'参数将与前两个问题提供帮助。 – aosmith

回答

5

如果您制作日期时间向量并将其提供给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") 
    ) 
) 
4

随着限制,我得到一个警告消息:“除去含有缺失值(geom_path)9行”

我用expand由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)) 

enter image description here