0

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

我刚刚意识到我还不能发布图片。所以我应该先描述我的图表。

如果有人可以帮助我,那就太好了。另外,这是我发布的第一个问题,所以如果您认为我应该改变发布问题的方式,请告诉我。谢谢!

4

1 回答 1

1

你不能指望 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)

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

在此处输入图像描述

于 2013-05-13T22:28:34.640 回答