如何用R创建时间散点图?

时间:2011-08-23 11:49:52

标签: r ggplot2 time-series scatter-plot

数据是一系列日期和时间。

date time
2010-01-01 09:04:43
2010-01-01 10:53:59
2010-01-01 10:57:18
2010-01-01 10:59:30
2010-01-01 11:00:44
…

我的目标是用水平轴(x)上的日期和垂直轴(y)上的时间来表示散点图。我想如果同一天的时间不止一次,我也可以添加颜色强度。

创建日期直方图非常容易。

mydata <- read.table("mydata.txt", header=TRUE, sep=" ")
mydatahist <- hist(as.Date(mydata$day), breaks = "weeks", freq=TRUE, plot=FALSE)
barplot(mydatahist$counts, border=NA, col="#ccaaaa")
  1. 我还没想出如何创建一个散点图,其中轴是日期和/或时间。
  2. 我还希望能够使用线性日期YYYY-MM-DD不需要轴,但也可以根据MM-DD等月份(因此累积不同年份),或者甚至在几周内轮换。< / LI>

    欢迎任何帮助,RTFM URI打包或提示。

2 个答案:

答案 0 :(得分:15)

ggplot2包非常容易处理日期和时间。

创建一些日期和时间数据:

dates <- as.POSIXct(as.Date("2011/01/01") + sample(0:365, 100, replace=TRUE))
times <- as.POSIXct(runif(100, 0, 24*60*60), origin="2011/01/01")

df <- data.frame(
  dates = dates,
  times = times
)

然后获得一些ggplot2魔法。 ggplot会自动处理日期,但要正确设置时间轴格式,请使用scale_y_datetime()

library(ggplot2)
library(scales)
ggplot(df, aes(x=dates, y=times)) + 
  geom_point() + 
  scale_y_datetime(breaks=date_breaks("4 hour"), labels=date_format("%H:%M")) + 
  theme(axis.text.x=element_text(angle=90))

enter image description here


关于问题的最后部分,按周分组等:要实现这一点,您可能需要将数据预先汇总到所需的存储桶中。您可以使用plyr为此,然后将结果数据传递给ggplot

答案 1 :(得分:0)

我首先阅读as.POSIXct,strptime,strftime和difftime。这些和相关的功能应该允许您提取所需的数据子集。格式化有点棘手,所以请使用帮助文件中的示例 并且,一旦你的日期转换为POSIX类,as.numeric()会将它们全部转换为数值,因此很容易排序,绘图等。

编辑:Andre建议使用w / ggplot来简化你的轴规格是一个很好的建议。