【问题标题】:R X-axis Date Labels using plot()R X 轴日期标签使用 plot()
【发布时间】:2014-08-20 07:06:45
【问题描述】:

使用 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")

调用xlim 和ylim 来限定要绘制的数据的日期和价格范围;纸币价格绘制为 000 美元。 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 Observations: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"))

都会导致错误消息。

【问题讨论】:

    标签: r plot label axis


    【解决方案1】:

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

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

    给了

    注意xlim 只会放大部分情节。它不直接连接到轴标签,但轴标签将调整以提供“漂亮”范围以覆盖绘制的数据。只是做

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

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

    【讨论】:

    • 非常感谢您的有用评论。
    • 我认为 plot() 可能会在将视图缩放为 la xlim 或 ylim 之前绘制一个图表,包括漂亮的轴标签。我的数据框中有几个销售日期异常值,包括 1909 年的 obs。当我 plot() 不使用 xlim(包括异常值)时,我从 1920 年开始每隔 20 年得到一组不错的 X 轴标签;除了一个图形点之外的所有点都在图表的右轴上被挤压。大集中点下的唯一标签是 2000 - 与它在使用 xlim 的缩放版本中出现的相对位置相同。不可能是巧合。
    【解决方案2】:

    如果您正在实时运行绘图并且不介意一些警告,您可以在绘图函数中传递,例如 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 不是图形参数的警告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多