我正在使用格子按颜色制作每周汽车销售的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"
)
谢谢!
答案 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
可能会偏离实际绘制的标签。