【问题标题】:How to display all x labels in R barplot?如何在 R barplot 中显示所有 x 标签?
【发布时间】:2012-04-16 10:30:46
【问题描述】:

这是一个基本问题,但我找不到答案。我在一个面板中生成了大约 9 个条形图,每个条形图有大约 12 个条形图。我在输入中提供了所有 12 个标签,但 R 只命名了备用条。这显然是由于 R 中的一些默认设置需要更改但我找不到它。

【问题讨论】:

  • 使绘图画布更大

标签: r graph bar-chart axis-labels


【解决方案1】:

如果您在plot() 调用中使用las=2,则可能会显示所有标签。这个参数和下面提到的其他参数在?par 中进行了描述,它设置了绘图设备的图形参数。这会将文本旋转 90 度。否则,您将需要使用 xaxt="n"(抑制刻度和标签),然后通过单独调用 axis(1, at= <some numerical vector>, labels=<some character vector>) 将标签放入。

#  midpts <- barplot( ... ) # assign result to named object
axis(1, at = midpts, labels=names(DD), cex.axis=0.7) # shrinks axis labels

另一种方法是首先收集中点,然后使用text()xpd=TRUE 允许文本出现在绘图区域之外,srt 是文本旋转的某个角度作为命名参数来控制度数文字旋转:

text(x=midpts, y=-2, names(DD), cex=0.8, srt=45, xpd=TRUE)

需要使用绘图区域中的坐标来选择 y 值。

复制一个有用的评论:对于不知道这些参数做什么的未来读者:las=2 将标签逆时针旋转 90 度。此外,如果您需要缩小字体,您可以使用 cex.names=.5 来缩小尺寸

【讨论】:

  • las=2,效果很好,尤其适用于这么多条形图
  • las=2 建议有效,但 axis(...) 无效。 axis()barplot() 首先使用的;当它自己调用时,它会再次“尽量不绘制重叠的刻度标签”,(正如?axis 所说)。
  • 这取决于具体情况。在您提供此代码的情况下,每个刻度都会添加标签:axis(1, at = midpts, labels=names(DD), cex.axis=0.7)
  • 为不知道这些参数的作用的未来读者澄清:las=2 将标签逆时针旋转 90 度。此外,如果您需要缩小字体,您可以使用 cex.names=.5 缩小尺寸
  • @ms609 barplot 返回的对象(如果您分配它而不是仅仅将其用于绘图的副作用)是具有中点值的向量或矩阵。我以为它被命名为midpts,但任何名称都可以。如需更多信息,请阅读?barplot,重点关注“价值”部分。
【解决方案2】:

要在基本 R 条形图上获得旋转标签,您可以(就像我在这里所做的那样)调整其中一个 gridBase 包的小插图中给出的示例:

library(grid)
library(gridBase)

## Make some data with names long enough that barplot won't print them all
DD <- table(rpois(100, lambda=5))
names(DD) <- paste("long", names(DD), sep="_")

## Plot, but suppress the labels
midpts <- barplot(DD, col=rainbow(20), names.arg="")

## Use grid to add the labels    
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)

grid.text(names(DD),
    x = unit(midpts, "native"), y=unit(-1, "lines"),
    just="right", rot=50)

popViewport(3)

【讨论】:

  • 嗯。我只是得到“找不到功能”pushViewport“所以我猜这是旧的
  • @Dirk 感谢您的评论 看起来您现在需要显式加载 grid 包。我刚刚做了那个编辑,现在它可以按预期工作了。
【解决方案3】:

如果标签太大,R 不会标记每个条形。

我建议尝试通过将 las=2 参数传递给绘图函数来垂直旋转标签。

如果标签仍然太大,您可以尝试使用 cex.names=.5 参数缩小字体。

绘图的样本数据

sample_curve <- c(2.31,2.34,2.37,2.52,2.69,2.81,2.83,2.85,2.94, 3.03,  3.21,  3.33)   # create a sample curve
names(sample_curve)<-c("1 MO","2 MO","3 MO","6 MO","1 YR","2 YR","3 YR","5 YR","7 YR","10 YR","20 YR","30 YR") # label the curve

标签过大的绘图示例

barplot(sample_curve) # labels too big for the plot

带有旋转和小标签的绘图示例

barplot(sample_curve, las=2, cex.names=.5) # lables are rotated and smaller, so they fit

【讨论】:

    【解决方案4】:

    在绘制barplot()之前

    您可以简单地使用 par() 和边距值(您的绘图有 4 个边距)mar = c(v1,v2,v3,V4) 来增加边距

    par(mar=c(10,4,4,4))
    

    例如:

    par(mar=c(10,4,4,4))
    barplot(height=c(1,5,8,19,7),
            names.arg=c("very long label 1","very long label 2",
                        "very long label 3","very long label 4",
                        "very long label 5"), las=2 )
    
    

    【讨论】:

      猜你喜欢
      • 2015-11-05
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2020-11-05
      • 2020-10-24
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      相关资源
      最近更新 更多