使用plot()绘制R X轴日期标签

5
使用R中的plot()函数,我正在尝试从一个时间序列交叉房地产销售数据集的数据框格式中生成点的散点图,其形式为(SaleDate,SalePrice) = (saldt,sapPr)。我的问题涉及X轴的标签。任何一系列年度标签都可以满足要求,例如1999、2000、……、2013或1999-01-01、……、2013-01-01。但是我现在得到的仅仅是一个标签,2000,它似乎是正确位置上的标签,但不能满足我的要求。
下面是我的plot()调用:
plot(r12rgr0$saldt, r12rgr0$salpr/1000, type="p", pch=20, col="blue", cex.axis=.75, 
     xlim=c(as.Date("1999-01-01"),as.Date("2014-01-01")),
     ylim=c(100,650), 
     main="Heritage Square Sales Prices $000s 1990-2014",xlab="Sale Date",ylab="$000s")

需要绘制的数据的日期和价格范围被称为xlimylim;请注意,价格以$000s为单位进行绘制。r12rgr0$saldt确实是一个日期;str(r12rgr0$saldt)返回:

Date[1:4190], format: "1999-10-26" "2013-07-06" "2003-08-25" NA NA "2000-05-24"  xx 

我已经查看了几个关于类似问题的帖子,发现解决方法可能在于关闭默认X轴行为并使用axis.date,但是:i)在我的当前R技能水平下,我不确定能否解决问题;ii)我想知道为什么绘图默认会产生这些相当令人困惑(至少对我来说是如此)的结果?
附加观察:Y轴标签完全正确100、200、……、600。散点图的一般外观表明观察到了所需的日期范围,并且绘制点的相对位置是正确的。将上述xlim=更换为xlim=c(“1999-01-01”,“2014-01-01”)
xlim=c(as.numeric(as.character("1999-01-01")),as.numeric(as.character("2014-01-01")))

或者
xlim=c(as.POSIXct("1999-01-01", format="%Y-%m-%d"),as.POSIXct("2014-01-01", format="%Y-%m-%d"))

所有结果都显示错误信息。

2个回答

17

对于绘图,如果没有示例数据,很难复现结果。这是一个我将使用的样本。

dd<-data.frame(
  saldt=seq(as.Date("1999-01-01"), as.Date("2014-01-10"), by="6 mon"),
  salpr = cumsum(rnorm(31))
)

一个简单的情节

with(dd, plot(saldt, salpr))

产生几个年份标记

在此输入图片描述

如果我想要更多的控制,我可以像你暗示的那样使用axis.Date

with(dd, plot(saldt, salpr, xaxt="n"))
axis.Date(1, at=seq(min(dd$saldt), max(dd$saldt), by="30 mon"), format="%m-%Y")

这将呈现:

enter image description here

注意,xlim 只会缩放图形的部分。它与轴标签没有直接联系,但轴标签会调整以提供覆盖所绘制数据的“漂亮”范围。只执行以下操作:

xlim=c(as.Date("1999-01-01"),as.Date("2014-01-01"))

这是正确的缩放图表的方式。无需转换为数字或POSIXct。


非常感谢您的有益评论。 - jackw19
我认为plot()可能会在缩放视图以xlim或ylim的方式之前绘制包括漂亮的坐标轴标签的图表。我的数据框中有几个销售日期异常值,包括1909年的观测结果。当我使用plot()而不使用xlim绘制图形时,包括异常值,我得到一组漂亮的X轴标签,间隔为20年,从1920年开始;所有但一个被绘制的点都被挤到了图表的右边。在大量点的下方唯一的标签是2000 -- 与在使用xlim的缩放版本中出现的相同相对位置。这不能是巧合。 - jackw19

0

如果您正在实时运行一个图形并且不介意一些警告,您可以在绘图函数中传递例如format =“%Y-%m-%d”。例如:

plot(seq((Sys.Date()-9),Sys.Date(), 1), runif(10), xlab = "Date", ylab = "Random")

返回:

产生: 而:

plot(seq((Sys.Date()-9), Sys.Date(), 1), runif(10), format = "%Y-%m-%d", xlab = "Date", ylab = "Random")

产生: 有许多关于 format 不是图形参数的警告。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接