7

我正在 ggplot 中绘制一个图,其中 x 轴标签包含不同蛋白质的名称,我遇到了麻烦,因为其中一些名称太长并且标签变得如此之大以至于很难看到图。

有什么方法可以减少 x 轴标签中的字符数,而不是“打印”更大的图形?

这是一个显示我的问题的示例:

library(ggplot2)
dat <- mtcars
# Make the x-axis labels very long for this example
dat$car <- paste0(rownames(mtcars),rownames(mtcars),rownames(mtcars),rownames(mtcars))

ggplot(dat, aes (x=car,y=hp)) +
    geom_bar(stat ="identity", fill="#009E73",colour="black") +
    theme_bw() +
    theme(axis.text.x = element_text(angle = 90, hjust = 1))

在此处输入图像描述

我想从这样的东西转换标签:

Thisisaveryveryveryloooooongprotein

对此

Thisisavery[...]   

这样我的情节就可以始终可见

4

2 回答 2

11

试试这个abbreviate功能:

qplot(Species, Sepal.Length, data=iris, geom="boxplot") +
  scale_x_discrete(label=abbreviate)

标签缩写示例

如果默认值不适用于您的情况,您可以定义自己的函数:

qplot(Species, Sepal.Length, data=iris, geom="boxplot") +
  scale_x_discrete(label=function(x) abbreviate(x, minlength=7))

您也可以尝试旋转标签。

于 2013-07-25T12:53:10.863 回答
7

由于abbreviate通过从字符串中删除空格和小写元音来工作,它可能会导致一些奇怪的缩写。在许多情况下,最好截断标签。

您可以通过将任何字符串截断函数传递给函数的label=参数来做到这一点scale_*:一些好的是stringr::str_trunc和基本的 Rstrtrim

mtcars$name <- rownames(mtcars)

ggplot(mtcars, aes(name, mpg)) +
    geom_col() +
    scale_x_discrete(label = function(x) stringr::str_trunc(x, 12)) +
    theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))

在此处输入图像描述

于 2019-10-04T22:28:50.777 回答