我有一个动物园对象,有一个年度指数,大约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只是改变了字体大小。)
答案 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)
我使用了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()