【问题标题】:x-axis labeling with 'non-date' x-values带有“非日期”x 值的 x 轴标签
【发布时间】:2013-05-13 21:52:14
【问题描述】:

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

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

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

【问题讨论】:

  • 请阅读this 获取有关如何编写问题的指导,为我们提供足够的信息来实际回答问题。
  • 您好,欢迎来到 SO。我相信你会发现这里有很多人愿意帮助你。如果您可以查看@joran 链接的帖子并提供可重复的示例,它将帮助其他人更有效地帮助您
  • 如果您使用的是 Mac,以下功能将快速将示例数据添加到剪贴板,您可以将其粘贴到此处:raw.github.com/rsaporta/pubR/gitbranch/reproduce.R
  • plot(data$Date, y = data$AccBH, type='l') 有帮助吗?
  • 在 x 轴的数据(不是任何标准日期表示)被强制转换为适当的类之前,没有任何帮助。

标签: r axis axis-labels


【解决方案1】:

您不能指望 R 和 plot() 从您作为人类理解的任意字符串中组成数值,但对计算机来说可能是胡言乱语!

您需要通知 R,您的数据框中的向量 Date 代表一个日期 - 在 R 的说法中,是 "Date" 类的对象。现在因为你在那里没有时间,我们必须弥补它们 - 每个月的第一天就足够了。考虑这个简单的示例数据集

df <- data.frame(Date = paste(month.abb, "13", sep = "-"),
                 AccBH = rnorm(12))

我通过as.Date() 通知R Date 是一个"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)

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

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 2018-05-19
    • 2018-07-10
    • 2021-04-03
    • 1970-01-01
    • 2021-06-12
    • 2014-08-20
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多