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

时间:2014-06-29 23:27:14

标签: r plot label axis

使用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)我想知道为什么绘图默认值会产生这些令人费解的(至少对我而言)结果?

Addl观察: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 个答案:

答案 0 :(得分:10)

使用图表很难在没有样本数据的情况下重现结果。这是我将使用

的示例
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))

产生几年的成绩

enter image description here

如果我想要更多控制权,我可以使用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只会缩放部分地块。它没有直接连接到轴标签,但轴标签将调整为提供一个漂亮的&#34;范围覆盖绘制的数据。只做

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

是放大绘图的正确方法。无需转换为数字或POSIXct。

答案 1 :(得分: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 不是图形参数的警告。