2016-06-09 106 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")

相關問題