这是一个常见的问题,比如以前后台小伙伴的提问,一个是说ggtree
注释文本太长,另一个是clusterProfiler
的柱状图GO的描述太长,这是两个问题,一个是geom_text打出来的文本太长,一个是axis.text也就是xy轴的label太长,但这其实是一样的问题,就是我们需要在适当的地方截断,放成两行甚至于多行。
晒这个截屏主要想说一点,如果是一两句话就能说清楚的问题,可以提问,如果不是,则不要在后台提问,写邮件或者到论坛提问,是更好的方式,像截屏中显示的,图片显示过期,我根本就没看到过图片。于是你们发的图片我看不了,而且我如果没有在24小时之内回复,公众平台就不允许我回复了,因为问题已经过期。所以在此强调,不要在后台发图片提问,不要在后台问稍复杂的问题。
如果使用google搜索”ggplot2 word wrap”的话,SO上面就有答案了。
这个问题其实很简单,用stringr
包的str_wrap
来完成文本自动换行就行了。这里使用clusterProfiler
的barplot
来演示一下:
library(stringr)
library(ggplot2)
library(clusterProfiler)
data(geneList)
de <- names(geneList)[1:100]
x <- enrichKEGG(de)
p <- barplot(x)
p + scale_x_discrete(labels=function(x) str_wrap(x, width=10))
这里的barplot实际上是+coord_flip()翻转过来的,也就是说x轴在y轴的位置上,假设我们自己做图的时候,x轴太多文本,肯定不行的,会overlap,解决方案是旋转x轴的label,如果这时候太长,那样阅读起来很困难,就可以尝试+coord_flip()翻转一下。y轴自然没有这个问题。
往期精彩