在轴标签中添加换行符并在ggplot中添加勾号

deb*_*inf 13 r ggplot2

我正在寻找一种在绘图的x轴上使用长变量名的方法.当然我可以使用较小的字体或稍微旋转它们但我希望它们保持垂直和可读性.

举个例子:

df <- data.frame(a=LETTERS[1:20], b=rnorm(20), c=rnorm(20), d=rnorm(20))
df_M <- melt(df, id="a")
plot <- ggplot(data=df_M, 
               aes(x=variable, y=a, fill=value)) + 
          geom_tile() + 
          scale_fill_gradient(low="green", high="red")
plot
Run Code Online (Sandbox Code Playgroud)

这里x轴只是字母,但是如果我想使用全名,名称会使用不成比例的空间:

    plot +  
      theme(axis.text.x=element_text(angle=90)) + 
      scale_x_discrete(breaks=unique(df_M$variable), 
                       labels=c("Ambystoma mexicanum", 
                                "Daubentonia madagascariensis",
                                "Psychrolutes marcidus"))
Run Code Online (Sandbox Code Playgroud)

所以我想在标签上加一个换行符.最好在ggplot2中,但当然欢迎其他解决方案.

谢谢!

ags*_*udy 26

您可以添加自己的格式化程序(scales有关更多示例,请参阅包).在这里,我用新行替换x标签中的任何空格.

addline_format <- function(x,...){
    gsub('\\s','\n',x)
}

myplot + 
    scale_x_discrete(breaks=unique(df_M$variable), 
    labels=addline_format(c("Ambystoma mexicanum", 
                        "Daubentonia madagascariensis", "Psychrolutes marcidus")))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 不知道为什么需要`addline_format`函数.不能只在标签中直接指定换行符吗?例如,`c("Ambystoma \nmexicanum",......` (4认同)
  • 甚至不需要键入标签,这可以使用`scale_x_discrete(labels = function(x){sub(“ \\ s”,“ \ n”,x)}))` (3认同)

MKJ*_*TZN 19

通过str_replace_all(),将'foo_your_symbol_delim'替换为空格分隔''

通过str_wrap,宽度预先指定为'40',在空格分割''拆分,包裹碎片,然后粘贴

library(stringr)
...
+ scale_x_discrete(labels = function(x) str_wrap(str_replace_all(x, "foo" , " "),
                                                 width = 40))
Run Code Online (Sandbox Code Playgroud)

  • 因为我正在寻找类似的解决方案并创建了这个更通用且更有效的解决方案. (11认同)
  • 试图改进旧问题的答案没有错!也就是说,如果你使用一种不那么简洁的写作风格,你的答案会进一步提高. (2认同)

Soi*_*Guy 8

如果您不希望每个标签名称在每个间距实例中断开,您也可以\n在调用scale_x_continuous时使用(新行):

my.labels <- c("Ambystoma\nmexicanum",
               "Daubentonia madagascariensis", 
               "Psychrolutes marcidus") # first create labels, add \n where appropriate.

myplot + 
    scale_x_discrete(labels= my.labels)
Run Code Online (Sandbox Code Playgroud)

请注意,只有名字(Ambystoma mexicanum)将使用新的行命令(\n)中断.


小智 7

除了乔的回答之外,这也有效

myplot + scale_x_discrete(labels = c("Ambystoma\nmexicanum")
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 5

我还要补充@SoilSciGuy 的答案,如果您只想修改一个标签,您可以在scale_x_discrete().

myplot + scale_x_discrete(labels = c("Ambystoma mexicanum" = "Ambystoma\nmexicanum")
Run Code Online (Sandbox Code Playgroud)