我有一个情节,它是每种事件类型的简单条形图.我需要情节的标签在情节之下,因为一些事件有很长的名字并且横向压扁了情节.我试图在标题下面移动标签,但是当有很多事件类型时,它现在会被压扁.有没有办法有一个静态的地块大小(即条形图),以便长传说不会压缩情节?
我的代码:
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)
Run Code Online (Sandbox Code Playgroud)
结果:
我认为这是因为图像尺寸必须是静态的,因此曲线会因轴而牺牲.当我在情节下面放置一个传奇时,同样的事情发生了.
Uwe*_*Uwe 36
有几种方法可以避免标记的过度绘制或挤压绘图区域或提高可读性.所提出的哪种解决方案最合适将取决于标签的长度和条的数量以及许多其他因素.所以,你可能不得不玩.
不幸的是,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"
Run Code Online (Sandbox Code Playgroud)
x轴上的标签直立打印,相互叠加:
library(ggplot2) # version 2.2.0+
p <- ggplot(df, aes(V1, V2)) + geom_col() + xlab(NULL) +
ylab(yaxis_label)
p
Run Code Online (Sandbox Code Playgroud)
请注意,最近添加 geom_col()
而不是geom_bar(stat="identity")
正在使用.
x轴上的标签旋转90°,挤压绘图区域:
p + theme(axis.text.x = element_text(angle = 90))
Run Code Online (Sandbox Code Playgroud)
所有标签(包括y轴标签)都是直立打印的,提高了可读性,但仍然挤压了绘图区域(但在较小程度上,图表是横向格式):
p + coord_flip()
Run Code Online (Sandbox Code Playgroud)
标签是直立印刷的,避免过度绘图,减少了绘图区域的挤压.你可能不得不玩width
参数来stringr::str_wrap
.
q <- p + aes(stringr::str_wrap(V1, 15), V2) + xlab(NULL) +
ylab(yaxis_label)
q
Run Code Online (Sandbox Code Playgroud)
我最喜欢的方法:所有标签都是直立打印的,提高了可读性,减少了绘图区域的挤压.同样,您可能必须使用width
参数stringr::str_wrap
来控制标签分割成的行数.
q + coord_flip()
Run Code Online (Sandbox Code Playgroud)
scale_x_discrete()
为了完整起见,应该提到ggplot2
能够缩写标签.在这种情况下,我发现结果令人失望.
p + scale_x_discrete(labels = abbreviate)
Run Code Online (Sandbox Code Playgroud)
澄清一下,这个问题似乎是在问如何在 ggplot2 中指定面板大小。
我相信这个问题的正确答案是“你不能那样做”。
截至目前,似乎没有任何参数可以在任何 ggplot2 函数中设置来实现这一点。如果有的话,我认为它很可能是在调用中的调用height
和width
参数的形式(这就是我们对面板进行其他更改的方式,例如更改其背景颜色),但没有什么类似于对于文档,所以我最好的猜测是,指定面板尺寸是不可能的:element_rect
theme
element_rect
https://ggplot2.tidyverse.org/reference/element.html
以下参考资料很旧,但我找不到更多最新的内容可以肯定地证实情况是否如此:
https://groups.google.com/forum/#!topic/ggplot2/nbhph_arQ7E
在那次讨论中,有人问是否可以指定面板尺寸,哈德利说“还没有,但它在我的待办事项清单上”。那是九年前;我想它仍然在他的待办事项清单上!
除了上述使用交错标签的解决方案之外,还有一种解决方案。这些可以与文本换行一起使用以获得相当可读的结果:
p + scale_x_discrete(guide = ggplot2::guide_axis(n.dodge = 2),
labels = function(x) stringr::str_wrap(x, width = 20))
Run Code Online (Sandbox Code Playgroud)
p
(使用@Uwe的答案中的情节)