gpt4 book ai didi

r - 如何使用长标签保持ggplot的大小

转载 作者:行者123 更新时间:2023-12-03 13:17:58 26 4
gpt4 key购买 nike

我有一个图,它是每种事件类型的简单条形图。我需要将情节的标签放在情节下方,因为某些事件的名称很长,并且正在侧向挤压情节。我试图将标签移动到图下方,但现在当有很多事件类型时它会被向上压扁。有没有办法拥有静态图大小(即条形图),以便长图例不会压扁图?

我的代码:

ggplot(counts_df, aes(x = Var2, y = value, fill - Var1)+
geom_bar(stat = "identity") +
theme(legend.position = "bottom") +
theme(legen.direction = "vertical") +
theme(axis.text.x = element_text(angle = -90)

结果:

enter image description here

我认为这是因为图像大小必须是静态的,因此坐标轴会牺牲绘图。当我在情节下方放置一个图例时,也会发生同样的事情。

最佳答案

有几种方法可以避免过度绘制标签或挤压绘图区域或提高总体可读性。哪种提议的解决方案最合适取决于标签的长度和条的数量,以及许多其他因素。所以,你可能不得不四处游玩。

虚拟数据

不幸的是,OP 没有包含可重现的示例,因此我们必须编写自己的数据:

V1 <- c("Long label", "Longer label", "An even longer label",
"A very, very long label", "An extremely long label",
"Long, longer, longest label of all possible labels",
"Another label", "Short", "Not so short label")
df <- data.frame(V1, V2 = nchar(V1))
yaxis_label <- "A rather long axis label of character counts"

“标准”条形图

x 轴上的标签垂直打印,相互重叠:
library(ggplot2)  # version 2.2.0+
p <- ggplot(df, aes(V1, V2)) + geom_col() + xlab(NULL) +
ylab(yaxis_label)
p

注意最近添加的 geom_col()而不是 geom_bar(stat="identity")正在使用。

enter image description here

OP的方法:旋转标签

x 轴上的标签旋转 90° 度,挤压绘图区域:
p + theme(axis.text.x = element_text(angle = 90))

enter image description here

水平条形图

所有标签(包括 y 轴标签)都直立打印,提高了可读性,但仍然挤压了绘图区域(但由于图表是横向格式,所以程度较小):
p + coord_flip()

enter image description here

带标签的垂直条形图

标签垂直打印,避免过度绘图,减少绘图区域的挤压。您可能需要使用 width stringr::str_wrap 的参数.
q <- p + aes(stringr::str_wrap(V1, 15), V2) + xlab(NULL) +
ylab(yaxis_label)
q

enter image description here

带标签的水平条形图

我最喜欢的方法:所有标签都直立打印,提高可读性,
减少了地块面积的挤压。同样,您可能不得不玩弄 width stringr::str_wrap 的参数控制标签分割成的行数。
q + coord_flip()

enter image description here

附录:使用 scale_x_discrete() 缩写标签

为了完整起见,应该提到 ggplot2能够缩写标签。在这种情况下,我发现结果令人失望。
p + scale_x_discrete(labels = abbreviate)

enter image description here

关于r - 如何使用长标签保持ggplot的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41568411/

26 4 0