2016-06-09 73 views
0

我正在使用R 3.2.3通过RStudio版本0.99.491,在Windows 10 64位上...制作我的第一个geom_line ggplot图表我认为我成功地导航了问题新手的蛮力。直到在帮助下,我想出了POSIXct问题,显示图表滴答跳过x轴的02:00 PM间隔,直到03:00 PM间隔,但是02:00 PM数据。 这里是data开始第一次转换。ggplot2正在x轴上跳过一个时间间隔

这里是Graph

library(reshape2) 
    library(ggplot2) 
    library(scales) 

myData_on <- melt(line_hour_on, id.vars = "time") 
dat_on <- myData_on[myData_on$time != "Total",] 
dat_on$time_ <- as.POSIXct(paste(dat_on$time),origin = "7:00 AM", format = "%H") 

     on_nov <- dat_on[dat_on$variable=="nov",] 
     ggplot(data=dat_on, aes(x=time_, y=value, group =variable, colour = variable)) + 

       geom_line(data = dat_on, size = 2, alpha = 0.75) + 
       geom_point(data = dat_on, size =3, alpha = 0.75) + 

       geom_line(data = on_nov, color = "black", size = 3, alpha = 0.60) + 
       geom_point(data = on_nov, color = "grey30", size = 6.5) + 
       geom_line(data = on_nov, color = "white", size = 1.5, alpha = 0.97) + 
       geom_point(data = on_nov, color = "white", size = 5, alpha = 0.97) + 
       geom_point(data = on_nov, color = "blue", size = 3, alpha = 0.25) + 

       scale_x_datetime(labels = date_format("%I:%M %p"), breaks = date_breaks("2 hour"))+ 
       scale_colour_manual(values = c('#a6cee3','#1f78b4','#b2df8a','#33a02c','#fb9a99','#e31a1c','#fdbf6f','#ff7f00','#cab2d6','#6a3d9a','#ffff99','#b15928'))+ 

       ggtitle("Boarding the Bus Ridership November 2016") + 
       labs(x="Time",y="Count")+ 
       theme(plot.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=32, hjust=0.5)) + 
       theme(axis.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=22))+ 
       theme_fivethirtyeight() 
+0

这是... ggplot错误绘制数据的不寻常之处。你确定下午2点的数据显示在错误的地方吗?或者你确定问题只是下午2点?你的图表显示4月份从早上8点开始在10点以上,但是数据的4月份在上午8点8点。我的猜测是转换是问题,而不是'ggplot'。你确定你的'time_'列是正确的吗? – Gregor

+0

@格雷戈,是的,哇,所有的数据都出错了。我不知道为什么。 –

+0

也许会分享'dput(line_hour)',那样我们至少会从相同的(复制/粘贴)位置开始。 – Gregor

回答

2

你定义的次as.POSIXct只拿了个小时的路,所以得了取消了对AM/PM的信息。

head(dat_on[,c(1, 4)], n = 10) 
     time    time_ 
1 8:00 AM 2016-06-09 08:00:00 
2 9:00 AM 2016-06-09 09:00:00 
3 10:00 AM 2016-06-09 10:00:00 
4 11:00 AM 2016-06-09 11:00:00 
5 12:00 PM 2016-06-09 12:00:00 
6 1:00 PM 2016-06-09 01:00:00 
7 2:00 PM 2016-06-09 02:00:00 
8 3:00 PM 2016-06-09 03:00:00 
9 4:00 PM 2016-06-09 04:00:00 
10 5:00 PM 2016-06-09 05:00:00 

如果切换format参数给出关于time列如何格式化结果R1信息更好看,所产生的图形似乎是有意义。

dat_on$time_ <- as.POSIXct(paste(dat_on$time), 
         origin = "7:00 AM", format = "%I:%M %p", tz = "UTC") 

head(dat_on[,c(1, 4)], n = 10) 

     time    time_ 
1 8:00 AM 2016-06-09 08:00:00 
2 9:00 AM 2016-06-09 09:00:00 
3 10:00 AM 2016-06-09 10:00:00 
4 11:00 AM 2016-06-09 11:00:00 
5 12:00 PM 2016-06-09 12:00:00 
6 1:00 PM 2016-06-09 13:00:00 
7 2:00 PM 2016-06-09 14:00:00 
8 3:00 PM 2016-06-09 15:00:00 
9 4:00 PM 2016-06-09 16:00:00 
10 5:00 PM 2016-06-09 17:00:00 

通知我用tz = "UTC"而不必R中,使用我的本地时区。这是scale_x_datetime中的默认时区,如果我忘记执行此操作,我所有的时间都会在我的情节中抵消。另一种方法是将date_format中的时区设置为scale_x_datetime,例如date_format("%I:%M %p", tz = "America/Los_Angeles")