【问题标题】:R/Zoo: show a tick every year on x-axisR/Zoo:每年在 x 轴上显示一个刻度
【发布时间】:2012-01-23 04:05:51
【问题描述】:

我有一个带有 yearqtr 索引的动物园对象,涵盖大约 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 只是改变了字体大小。)

【问题讨论】:

    标签: r plot zoo


    【解决方案1】:

    你读过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 值来匹配它。每年一次可能还是太多了。

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

    【讨论】:

    • 谢谢@Dirk 我确实阅读了帮助页面,这很令人困惑。但我期待/希望有比这个正确答案更简单的东西。好像比较低级。 (计算好的轴标签很难,但并非不可能,所以我很惊讶 R 项目中还没有人解决它。)
    • 当然已经解决了,查看各种绘图方法的各种axis()函数的代码。但这并不能消除它仍然很难的事实。现在,对于像这样的一次性任务,我展示的基本 axis() 使用仍然是可能的。
    【解决方案2】:

    当您想要使用网格而不是刻度来更好地显示您的数据时,这可能是那些(罕见的)情况之一。正如@dirk-eddelbuettel 指出的那样——调整好的轴标签很难,尤其是在这样的密度下。您可能还希望您的标签在绘图内,因此网格会稍微隐藏它们的密度。最容易获得的网格是abline,除非你想玩ggplot2,但它比R中的标准图更丑(个人意见)。另外 - 使情节更广泛。事实上,最好也去掉 box around plot ;) 下面是 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() 
    

    【讨论】:

    • 谢谢@GeekOnAcid 我的第一个问题是为什么不使用我自己回答的grid()(它只适用于默认轴标签)。但是,尚不清楚标签与哪个数据点一起使用 - 它是在两行之间,还是在左侧或右侧的某一行上?
    • @DarrenCook 在此解决方案中,日期点位于两行之间,但您可以移动它并在abline 中定义垂直条,以便它们从标签上方开始。
    猜你喜欢
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多