【问题标题】:How to consistently skip (or not skip) x axis labels in R base graphics如何在 R 基础图形中一致地跳过(或不跳过)x 轴标签
【发布时间】:2017-06-27 11:56:20
【问题描述】:

我想创建一个图形,由于各种原因,我需要自己指定轴标签。但是当我指定我的标签时(一些有一个数字,一些有两个数字) R 会抑制所有其他的两位数标签,因为它决定没有足够的空间来显示它们,但它会留下所有的一位数标签,留下轴看起来不平衡。

有没有办法在整个轴上一致地抑制标签,基于是否需要跳过它们?注意:我有很多不同比例的地块,所以我一直在寻找可以用于所有地块的东西——我不想为每个地块渲染所有标签,或者跳过每个地块中的所有其他标签。对于某些绘图而不是其他绘图,抑制标签将是可取的。如果这是 R 选择为特定情节做的事情,我只想始终跳过所有其他标签。

(这是我的意思的示例figure。我想要的是在 x 轴上也抑制“6%”标签。) 示例代码:

library(labeling)

df <- data.frame("estimate" = c(9.81, 14.29, 12.94), 
             "lower" = c(4.54, 6.25, 5.12), 
             "upper" = c(12.85, 20.12, 15.84))
ticks <- extended(min(df$lower), max(df$upper), m = 5, only.loose = TRUE, 
              Q=c(2, 5, 10))

png("examplePlot.png", width = 1200, height = 900, pointsize = 10, res = 300)
bars <- barplot(df$estimate, horiz = TRUE, col = "white", border = NA, 
            xlim = c(min(ticks), max(ticks)), xaxt = "n", main = "Example")
arrows(df$lower, bars, df$upper, bars, code = 3, angle = 90, length = 0.03)
points(df$estimate, bars, pch = 20)

tickLabels <- paste(ticks, "%", sep = "")
axis(1, at=ticks, labels = tickLabels, cex.axis=1)  
axis(2, at = bars, labels = c("c", "b", "a"), lwd = 0, las = 2)
dev.off()

【问题讨论】:

    标签: r plot axis-labels


    【解决方案1】:

    这取决于绘图的大小,因此您必须分别绘制每个标签:

    axis(1, lwd.ticks = 1, labels = FALSE, at = ticks) # plot line and ticks
    i <- seq(1,length(ticks),2) # which labels to plot
    for(ii in i)
      axis(1, at = ticks[ii], labels = tickLabels[ii], cex.axis = 1, lwd = 0)  
    

    【讨论】:

    • 我不想总是跳过每个情节上的所有其他标签 - 我希望的是始终跳过或不跳过,具体取决于是否 该图需要跳过任何 标签。 (例如,我有一些地块已经有 5 个间隔良好的标签,所以如果我跳过所有其他的标签,我最终只会得到 10%、50% 和 90% 的标签)。我已经相应地编辑了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多