R / Zoo:每年在x轴上显示一个刻度

时间:2012-01-23 04:05:52

标签: r plot zoo

我有一个动物园对象,有一个年度指数,大约50年。绘制时,x轴每10年显示一次标签,感觉有点贫瘠:

b=zoo(1:200,as.yearqtr(1900+seq(1,200)/4))
plot(b)

有些研究让我知道了:

plot(b,xaxt="n");axis(1,time(b))

感觉就像从一个极端摆动到另一个极端,因为x轴是蜱的模糊,带有难看的分数标签。有一个简单的方法让它显示多年? (我最初想要的是一种说法:“稍微降低x轴标签间距”,但似乎没有这样的东西?cex.axis只是改变了字体大小。)

2 个答案:

答案 0 :(得分:4)

您是否阅读了help(axis)

这是一种方法,只需每四个季度创建一个简单的索引:

R> ind <- seq(1, length(b), by=4)

并使用它来索引轴展示位置标签

R> plot(b,xaxt="n")
R> axis(1,time(b)[ind], format(time(b)[ind]), las=2, cex.axis=0.5)

enter image description here

我使用了las=2和较低的cex值来使其合适。每年一次可能仍然太多。

计算“好”轴标签真的很难。

答案 1 :(得分:1)

这可能是那种(罕见的)情况之一,当你想使用网格而不是滴答来更好地显示你的数据。正如@dirk-eddelbuettel所指出的那样 - 调整良好的轴标签很难,尤其是这种密度。你也可能想要你的标签在图中,所以网格会略微隐藏它们的密度。最简单的网格是abline,除非你想玩ggplot2,但它比R(个人意见)中的标准图更丑。此外 - 使情节更宽。事实上,最好摆脱情节周围的盒子;)下面是Dirk的方法的模式:

png("strangeplot.png",width=800)
#extend y-axis to fit inside labels and remove box
plot(b,type="n",xaxt="n",yaxt="n",ylab="",xlab="",ylim=c(min(b)-30,max(b)),bty="n"))
#use 'mpg' to get labels inside
axis(1,time(b)[ind], format(time(b)[ind]), las=2, cex.axis=0.6,tick=F,mgp=c(0,-2.5,0))
axis(2,tick=F,las=1)
#you locate lines slightly to the left of label...
abline(h=seq(0,200,by=50),v=time(b)[ind]-0.5,col=gray(0.9))
#...so you need to add extra single line in the end 
abline(v=max(time(b)[ind])+0.5,col=gray(0.9))
#plot at the end to get it above grid
points(b,type="l")
dev.off() 

enter image description here