R:使用Lattice格式化,自动缩放日期轴

时间:2013-12-16 23:26:10

标签: r formatting lattice

我正在使用格子按颜色制作每周汽车销售的xyplots。目前有108周的数据,我想每周更新这些数据,因此下周将有109周的数据等。

我遇到了适当格式化x(日期)轴的问题。关闭我在其他SO线程中读到的内容(例如this)我想出了下面的代码。日期现在是我想要的%d-%b格式,但现在我每周都会显示(所有108个。)

所需的行为是指定日期的格式(%d-%b)并自动使轴适合图表,让R根据图表的大小确定一次显示的日期数和多少周的数据。 (我知道我可以过滤标签并指定我想要出现的数量,但这不是理想的行为。)

这是我的代码:

library(lattice)

salesData <- read.csv("http://s3.amazonaws.com/rk-misc/samples/sales.csv")

# convert to date format
salesData$week <- as.POSIXct(strptime(salesData$week,"%Y-%m-%d"))

# plot
xyplot(sales ~ week | carColor, data=salesData[order(salesData$week),], 
  type="l",
  scales = list(
    x = list(
      at = salesData$week,
      labels = format(salesData$week, "%d-%b")
    )
  ),
  xlab = "Date",
  ylab = "Sales"
)

谢谢!

1 个答案:

答案 0 :(得分:2)

由于您将x轴数据转换为POSIXct类,因此可以使用format参数的scales组件来指定轴标签的格式:

xyplot(sales ~ week | carColor, data=salesData[order(salesData$week),], 
  type="l",
  scales = list(
    x = list(
      format = "%d-%b" # Here's where you choose the format
    )
  ),
  xlab = "Date",
  ylab = "Sales"
)

格子图使用pretty函数来帮助确定要绘制的轴标签。所以

format(pretty(salesData$week), "%d-%b")
在大多数情况下,

应该返回被绘制的标签。格子(更具体地说是grid)图形也检查轴标签的潜在重叠。如果标签可能会重叠,只需使用pretty可能会偏离实际绘制的标签。