你不能指望 R 和plot()
用你作为人类理解的任意字符串组成数字值,但对计算机来说也可能是胡言乱语!
您需要通知 R,Date
您的数据框中的向量代表一个日期——用 R 的说法是 class 的对象"Date"
。现在因为你在那里没有时间,我们必须弥补它们 - 每个月的第一天就足够了。考虑这个简单的示例数据集
df <- data.frame(Date = paste(month.abb, "13", sep = "-"),
AccBH = rnorm(12))
我通过 通知 R 那Date
是一个"Date"
对象as.Date()
。请注意,我将粘贴01-
到已经存在的每个月-年组合上df
。还提供了一个适当的format
说明符来告诉 R 如何“读取”日期的元素(阅读?strftime
这些详细信息)
df <- transform(df,
Date = as.Date(paste("01", as.character(df$Date), sep = "-"),
format = "%d-%b-%y"))
一旦我们拥有正确格式的数据,如str()
函数所示
> str(df)
'data.frame': 12 obs. of 2 variables:
$ Date : Date, format: "2013-01-01" "2013-02-01" ...
$ AccBH: num 0.494 -0.759 -2.204 -2.004 2.808 ...
plot()
正常工作:
plot(AccBH ~ Date, data = df, type = "l")
产生类似的东西(你会有不同的数据):
如果您想要不同的标签,那么您需要自己指定,例如
plot(AccBH ~ Date, data = df, type = "l", xaxt = "n")
with(df, axis.Date(side = 1, x = Date, format = "%b-%y"))
有关?axis.Date
更多详细信息,请参阅。
请注意,zoo包具有专门针对今年月份的数据类型,即"yearmon"
类。您可以在不摆弄原始数据的情况下使用它
df2 <- data.frame(Date = paste(month.abb, "13", sep = "-"),
AccBH = rnorm(12))
通过使用as.yearmon()
函数
require("zoo")
df2 <- transform(df2, Date = as.yearmon(Date, format = "%b-%y"))
然后"zoo"
使用由此创建的变量创建一个对象
zobj <- with(df2, zoo(AccBH, order.by = Date))
这给
> zobj
Jan 2013 Feb 2013 Mar 2013 Apr 2013 May 2013 Jun 2013
-0.607986011 1.741046878 -0.603960213 -1.319397405 -0.355051912 0.296862314
Jul 2013 Aug 2013 Sep 2013 Oct 2013 Nov 2013 Dec 2013
0.235978782 -0.308123299 -0.200230379 -0.004428621 -0.858600654 -0.241808594
然后可以绘制
plot(zobj)
但请注意,它有自己的标记轴的方式。