我有一个情节,它是每种事件类型的简单条形图.我需要情节的标签在情节之下,因为一些事件有很长的名字并且横向压扁了情节.我试图在标题下面移动标签,但是当有很多事件类型时,它现在会被压扁.有没有办法有一个静态的地块大小(即条形图),以便长传说不会压缩情节?
我的代码:
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)
结果:
我认为这是因为图像尺寸必须是静态的,因此曲线会因轴而牺牲.当我在情节下面放置一个传奇时,同样的事情发生了.
有几种方法可以避免标记的过度绘制或挤压绘图区域或提高可读性.所提出的哪种解决方案最合适将取决于标签的长度和条的数量以及许多其他因素.所以,你可能不得不玩.
不幸的是,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")
正在使用.
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)