我使用R生成折线图并有两个向量,一个用于x值,另一个用于y值。更具体的是它随着时间的推移而累积的表现。我可以使用我的数据(data$AccBH
)绘制线条。但是,当我尝试将y的数据放在代码中时:
plot(data$Date, data$AccBH, type='l')
它不起作用。在文档中我读到了这个“plot(x,y,...)”,所以我想我只需要将y和x的向量放在各自的位置。我的x数据是“非日期”日期,例如'Jan-00'。
基本上,我想要的是让我的y数据显示在x轴上,而不是下图中的50,100,150 ..到目前为止,我发现的只是在x轴上使用“实际日期”。
我刚才意识到我还无法发布图片。所以我应该首先描述我的图表。
如果有人可以帮助我,那将会很棒。另外,这是我发布的第一个问题,所以如果你认为我应该改变发布问题的方式,请告诉我。谢谢!
答案 0 :(得分:1)
您不能指望R和plot()
组成来自您作为人类理解的任意字符串的数值,但对计算机来说可能是胡言乱语!
您需要通知R数据框中的向量Date
表示日期 - 在R用语中是类"Date"
的对象。既然你没有那里的日子,我们必须把它们弄清楚 - 每个月的第一天就足够了。考虑这个简单的示例数据集
df <- data.frame(Date = paste(month.abb, "13", sep = "-"),
AccBH = rnorm(12))
我通过Date
告知R "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)
但请注意它有自己标记轴的方式。