【问题标题】:Increase margin of figure to include long labels增加图形的边距以包括长标签
【发布时间】:2026-01-22 09:50:01
【问题描述】:

基本上,我想确保我在 x 轴上的所有标签都不重叠,并且图形边距足够长,可以看到垂直标签。

par(mar=c(180, 70, 2, 2.1)) 
oldfont <- par(font=3) 
table(new$Tag)
barplot(table(new$Tag),x,las=2,cex.lab=100)

请在此处找到条形图图像!

【问题讨论】:

  • 请附上一个完整的例子,以帮助我们做一些事情。您可以嵌入图片,也方便我们。
  • 嗨 AkselA -> 感谢您的反馈。我附上了一张我的条形图的图片。您无法查看吗?您可能必须单击一个链接,因为我似乎没有足够的声誉将图像直接发布到文本字段。对此感到抱歉。
  • 我不知道您需要一定数量的代表才能发布图片,但我现在可以看到是的。
  • 我注意到很多类别的计数为 1。是否有可能从条形图中删除这些内容并分别告知读者这些内容?

标签: r plot


【解决方案1】:

您是否在寻找不仅仅是更改边距、文本大小等的东西?
通过删去单数和截断名称,可以稍微提高可读性。

set.seed(1)

words <- sapply(
  sample(3:25, 50, replace=TRUE), 
  function(x) {
      paste(sample(c(letters), x, replace=TRUE), collapse="")
      }
)

strtrunc <- function(x, l, r="…") {
    trunc <- nchar(x) > l
    x[trunc] <- paste0(strtrim(x[trunc], l), r)
    x
}


samp <- sample(1:50, 500, replace=TRUE)
samp.t <- round(1.2^table(samp))
samp.t[sample(1:50, 20)] <- 1
names(samp.t) <- words

dev.new(width=10, height=5)
par(mar=c(10, 4, 3, 0.5), mgp=c(0, 0.8, -0.5), cex=0.9)
b <- barplot(samp.t, xaxt="n", space=0.5, col=1)
axis(1, at=b, labels=names(samp.t), las=2, tick=FALSE, cex.axis=0.8)
mtext("All counts", line=1, cex=1.5)

#barplot with logarithmic y-axis, truncated names and no single-counts
samp.ts <- samp.t[samp.t != 1]
names(samp.ts) <- strtrunc(names(samp.ts), 15)

dev.new(width=10, height=5)
par(mar=c(10, 4, 3, 0.5), mgp=c(0, 0.8, -0.5), cex=0.9)
b <- barplot(samp.ts, xaxt="n", space=0.5, col=1, log="y")
axis(1, at=b, labels=names(samp.ts), las=2, tick=FALSE, cex.axis=1.2)
mtext("Counts > 1", line=1, cex=1.5)

具有超过 20 个左右命名类别的条形图通常效果不佳,您最好找到一种不同的方式来可视化您的数据。如果对您的数据有意义,直方图或密度图可能是一种选择。否则,将条形图分成更小的部分,也许是由明智的群体,可能是另一个。

【讨论】:

  • +1 用于建议不同类型的可视化。图表应该努力从复杂的数据集中提取清晰的视觉故事,而不是简单地用作原始数据转储。