有多种方法可以避免标签过度绘制或挤压绘图区域或提高总体可读性。哪种解决方案最合适将取决于标签的长度和条形的数量以及许多其他因素。所以,你可能不得不玩一玩。
虚拟数据
不幸的是,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)