3

可能重复:
使用 ggplot2 在 x 轴上绘制日期,在 y 轴上绘制时间

我有这些数据,

Arrival Date
7:50    Apr-19
7:45    Apr-20
7:30    Apr-23
7:30    Apr-24
7:55    Apr-25
7:20    Apr-26
7:30    Apr-27
7:50    Apr-28
8:00    Apr-30
7:45    May-2
8:30    May-3
8:06    May-4
8:25    May-7
7:35    May-8
7:45    May-9
8:02    May-10
7:53    May-11
8:39    May-14
8:14    May-15
8:08    May-16
8:27    May-17
8:20    May-18
12:00   Apr-19
12:00   Apr-20
12:00   Apr-23
12:00   Apr-24
12:00   Apr-25
12:00   Apr-26
12:00   Apr-27
12:00   Apr-28
11:50   Apr-30
12:00   May-2
11:45   May-3
11:50   May-4
12:00   May-7
11:50   May-8
11:55   May-9
12:10   May-10
11:53   May-11
11:54   May-14
11:40   May-15
11:54   May-16
11:45   May-17
12:00   May-18

我想用ggplot来绘制它,

这就是我所做的,

OJT <- read.csv(file = "Data.csv", header = TRUE)

qplot(Date,Arrival, data = OJT, xlab = expression(bold("Date")), ylab = expression(bold("Time"))) + theme_bw() + opts(axis.text.x=theme_text(angle=90)) +geom_point(size = 2, colour = "black", fill = "red", pch = 21)

这是输出

在此处输入图像描述

如您所见,时间和日期没有安排好。我希望时间从早上 7:00 到下午 12:20,日期从 4 月 19 日到 5 月 18 日。我尝试使用

as.Date(strptime(OJT$Date,"%m-%dT"))

但我仍然没有得到正确的情节。

我无法通过互联网找到类似的问题。

有什么想法可以帮助我解决这个问题。

谢谢

4

2 回答 2

2

我将尝试一种不同的方法,并在lubridate. 目标地块:

日期小时图

代码,包括您的数据:

library("ggplot2")
library("lubridate")

df <- read.table(text = "Arrival Date
7:50    Apr-19
7:45    Apr-20
7:30    Apr-23
7:30    Apr-24
7:55    Apr-25
7:20    Apr-26
7:30    Apr-27
7:50    Apr-28
8:00    Apr-30
7:45    May-2
8:30    May-3
8:06    May-4
8:25    May-7
7:35    May-8
7:45    May-9
8:02    May-10
7:53    May-11
8:39    May-14
8:14    May-15
8:08    May-16
8:27    May-17
8:20    May-18
12:00   Apr-19
12:00   Apr-20
12:00   Apr-23
12:00   Apr-24
12:00   Apr-25
12:00   Apr-26
12:00   Apr-27
12:00   Apr-28
11:50   Apr-30
12:00   May-2
11:45   May-3
11:50   May-4
12:00   May-7
11:50   May-8
11:55   May-9
12:10   May-10
11:53   May-11
11:54   May-14
11:40   May-15
11:54   May-16
11:45   May-17
12:00   May-18", header=TRUE)

df$Date <- paste('2012-',df$Date, sep='')
df$Full <- paste(df$Date, df$Arrival, sep=' ')
df$Full <- ymd_hm(df$Full)
df$decimal.hour <- hour(df$Full) + minute(df$Full)/60

p <- ggplot(df, aes(x=Full, y=decimal.hour)) +
    geom_point()
p
于 2012-05-19T15:33:57.743 回答
1
#make some data in your kind of format:

tS <- dummySeries()
a<-rownames(tS)
x<-c(a,a)
y<-1:24
dat<-as.data.frame(cbind(x,y))

#get it in the format for the plot

v<-paste(dat$x,dat$y, sep=" ") 
v2<-as.POSIXct(strptime(v, "%Y-%m-%d %H",tz="GMT"))
v3<-sort(v2)
hrs<-strftime(v2,"%H")
days<-strftime(v2,"%Y-%m-%d")
final<-data.frame(cbind(days,hrs))
qplot(days,hrs,data=final) + geom_point()

#ooooff... I bet this can be done much cleaner...i know little about 
#time series data.

在此处输入图像描述

于 2012-05-19T14:57:43.557 回答