我有一个图,它是一种事件的每种类型的数量的简单的桶形图。我需要的标签,情节下的情节,因为有些事件有很长的名字,并挤压了情节侧。我试着把标签移到地块下面,但现在当有很多事件类型时,标签就会向上挤压。有没有一种方法有一个静态的情节大小(例如,条形图),以便长传说不会压扁情节?
我的代码:
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)结果:

我认为这是因为图像大小必须是静态的,所以图被牺牲在轴上。当我把一个传说放在情节下面时,也会发生同样的事情。
发布于 2017-01-12 07:16:05
有几种方法可以避免标牌过高,或者压缩绘图区域,或者提高一般的可读性。建议的解决方案中哪一种最合适,将取决于标签的长度、条形图的数量以及其他一些因素。所以,你可能得到处玩了。
虚拟数据
不幸的是,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")。

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

水平条形图
所有标签(包括y轴标签)都是垂直打印的,提高了可读性,但仍然压缩了绘图区域(但程度较小,因为图表是景观格式的):
p + coord_flip()

带标签的垂直条形图
标签打印直立,避免过标绘,减少了绘图面积的压缩。您可能必须使用width参数来处理stringr::str_wrap。
q <- p + aes(stringr::str_wrap(V1, 15), V2) + xlab(NULL) +
ylab(yaxis_label)
q

带标签的水平条形图
我最喜欢的方法是:所有标签都是笔直打印的,提高可读性,缩小地块面积。同样,您可能必须使用width参数来控制标签被分割成的行数,以控制stringr::str_wrap。
q + coord_flip()

增编:使用scale_x_discrete()的缩写标签
为了完整起见,应该提到的是,ggplot2能够缩写标签。在这种情况下,我觉得结果令人失望。
p + scale_x_discrete(labels = abbreviate)

发布于 2018-10-23 15:32:51
为了澄清,这个问题似乎要问的是如何在ggplot2中指定面板大小。
我相信这个问题的正确答案是“你不能这样做”。
到目前为止,似乎没有任何参数可以在任何ggplot2函数中设置。如果有,我认为很可能是以height和width参数的形式对对theme的调用进行element_rect调用(这是我们对面板进行其他更改的方式,例如更改面板的背景色),但与element_rect文档中的内容没有任何相似之处,所以我的最佳猜测是不可能指定面板大小:
https://ggplot2.tidyverse.org/reference/element.html
下面的引用是旧的,但我找不到更多的最新信息来肯定是否存在这种情况:
在讨论中,有人问是否可以指定面板大小,Hadley说“还没有,但它在我的待办事项列表中”。那是九年前的事了,我想它还在他的清单上!
发布于 2021-02-12 09:26:24
除了上述使用的交错标签之外,还有一个解决方案。这些可以与文本包装一起使用,以获得相当可读的结果:
p + scale_x_discrete(guide = ggplot2::guide_axis(n.dodge = 2),
labels = function(x) stringr::str_wrap(x, width = 20))(使用@Uwe答案中的p情节)

https://stackoverflow.com/questions/41568411
复制相似问题