我对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)

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高度自定义的轴一起使用.
| 归档时间: |
|
| 查看次数: |
35830 次 |
| 最近记录: |