使用'非日期'x值标记x轴

时间:2013-05-13 21:52:14

标签: r axis axis-labels

我使用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轴上使用“实际日期”。

我刚才意识到我还无法发布图片。所以我应该首先描述我的图表。

如果有人可以帮助我,那将会很棒。另外,这是我发布的第一个问题,所以如果你认为我应该改变发布问题的方式,请告诉我。谢谢!

1 个答案:

答案 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")

产生类似的东西(你将拥有不同的数据):

enter image description here

如果您需要不同的标签,那么您需要自己指定,例如

plot(AccBH ~ Date, data = df, type = "l", xaxt = "n")
with(df, axis.Date(side = 1, x = Date, format = "%b-%y"))

enter image description here

有关详细信息,请参阅?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)

但请注意它有自己标记轴的方式。

enter image description here