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

9
数据是一系列日期和时间。
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(因此不同年份会累积),甚至可以在周上旋转。

欢迎任何帮助、RTFM URI打击或提示。

2个回答

16
< p > ggplot2 包可以轻松处理日期和时间。 < p>创建一些日期和时间数据:
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


我安装了ggplot2,因为似乎ggplot不可用。 - karlcow
@karlcow 对不起,我应该说“ggplot2”。回答已经修改以反映这一点。 - Andrie
1
这个例子不再起作用了。我得到了以下错误:“无效输入:time_trans仅适用于POSIXct类的对象”。 - PAC
1
@PAC 不错的发现。我已经修改了代码和图形,现在它可以与最新版本的 ggplot2scales 一起使用了。 - Andrie

0
我会建议先阅读关于 as.POSIXct、strptime、strftime 和 difftime 的内容。这些及相关函数应该可以让您提取所需的数据子集。格式有点棘手,请在帮助文件中尝试这些示例。
而且,一旦您的日期被转换为 POSIX 类,as.numeric() 将把它们全部转换为数值,因此易于排序、绘图等。

编辑:André 建议使用 ggplot 来简化坐标轴规范。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接