How can I shorten x-axis label text in ggplot?

[亡魂溺海] 提交于 2020-02-02 02:31:21

问题


I'm making a plot in ggplot where the x-axis labels contain the names of different proteins, and I'm having trouble because some of these names are too long and the labels becomes so big that it is hard to see the plot.

Instead of "printing" a bigger graph, there is any way to reduce the number of characters in the x-axis labels?

Here's an example that shows my problem:

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))

I would like to convert the labels from something like this:

Thisisaveryveryveryloooooongprotein

To this

Thisisavery[...]   

So that my plot can be consistently visible


回答1:


Try the abbreviate function:

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

If the defaults won't do in your case, you can define your own function:

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

You can also try rotating the labels.




回答2:


Since abbreviate works by removing spaces and lower-case vowels from the string, it can lead to some strange abbreviations. For many cases, it would be better to truncate the labels instead.

You can do this by passing any string truncation function to the label= argument of scale_* function: some good ones are stringr::str_trunc and the base R strtrim

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))



来源:https://stackoverflow.com/questions/17858465/how-can-i-shorten-x-axis-label-text-in-ggplot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!