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

时间:2013-11-21 14:09:10

标签: 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

这里的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"))

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

谢谢!

5 个答案:

答案 0 :(得分:23)

您可以添加自己的格式化程序(有关更多示例,请参阅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")))

enter image description here

答案 1 :(得分:15)

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

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

+ scale_x_discrete(labels = function(x) str_wrap(str_replace_all(x, "foo" , " "),
                                                 width = 40))

答案 2 :(得分:6)

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

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

myplot + 
    scale_x_discrete(labels= my.labels)

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

答案 3 :(得分:0)

我还要在@SoilSciGuy的答案中添加一个答案,即如果您只想修改一个标签,则可以在.header { display: flex; display: -webkit-flex; align-items: center; -webkit-align-items: center; justify-content: center; -webkit-justify-content: center; } 内进行。

scale_x_discrete()

答案 4 :(得分:0)

除了乔的回答,这也有效

myplot + scale_x_discrete(labels = c("Ambystoma\nmexicanum")