使用R在时间序列图中标记X轴

Bti*_*rt3 12 plot r

我对R来说有些新手,并且在绘图方面经验有限.我已经能够使用动物园将我的数据作为时间序列对象在R中使用,但是我很难正确标记xaxis,如果全部的话.

当我绘制我的动物园对象时

plot(z)
Run Code Online (Sandbox Code Playgroud)

x轴仅显示一个标签,即2010年.该系列是从2009年4月到2010年10月的每周一次.

我试图将我的系列转换回ts对象,甚至是数据框(只有一列,不包括日期).

简单地说,我如何一般地控制x轴标签,以及时间序列对象?

提前致谢!

Rei*_*son 14

从一个例子开始:

x.Date <- as.Date(paste(rep(2003:2004, each = 12), rep(1:12, 2), 1, sep = "-"))
x <- zoo(rnorm(24), x.Date)
plot(x)
Run Code Online (Sandbox Code Playgroud)

如果我们想要不同的刻度位置,我们可以抑制默认轴绘图并添加我们自己的:

plot(x, xaxt = "n")
axis(1, at = time(x), labels = FALSE)
Run Code Online (Sandbox Code Playgroud)

或者结合它们:

plot(x)
axis(1, at = time(x), labels = FALSE)
Run Code Online (Sandbox Code Playgroud)

您需要指定刻度线的位置,因此如果您想要每月,每周等值(而不是上面的观察时间),您需要自己创建相关位置(日期):

## weekly ticks
plot(x)
times <- time(x)
ticks <- seq(times[1], times[length(times)], by = "weeks")
axis(1, at = ticks, labels = FALSE, tcl = -0.3)
Run Code Online (Sandbox Code Playgroud)

有关?axis.Date更多详细信息,请参阅?plot.zoo此类内容的大量示例.


42-*_*42- 10

轴标记与偶数月份分数不对齐,但在某些情况下可能有用.过去500天的随机数据(总计):

xx.Date <- as.Date((Sys.Date()-500):Sys.Date())
x <- zoo(cumsum(rnorm(501)), xx.Date)
tt=time(x)
plot(x, xaxt ="n")
tt <- time(x)
ix <- seq(1, length(tt), by=60) #every 60 days
fmt <- "%b-%d" # format for axis labels
labs <- format(tt[ix], fmt)
axis(side = 1, at = tt[ix], labels = labs,  cex.axis = 0.7)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


G. *_*eck 6

plot.zoo在R的经典图形中使用轴功能,但动物园也提供格子图形以及通过xyplot.zoo.只需更改plot即可xyplot满足您的需求:

library(zoo)
library(lattice)

# create test data
z <- zooreg(1:83, start = as.Date("2009-04-01"), deltat = 7)

xyplot(z)
Run Code Online (Sandbox Code Playgroud)

请注意,在进一步的例子?plot.zoo?xyplot.zoo以及随之而来动物园三个护身符.在这些地方,您还可以找到不同方法的示例,展示如何将axis经典图形的功能与plot.zoo高度自定义的轴一起使用.