我正在寻找一种在绘图的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)

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)
如果您不希望每个标签名称在每个间距实例中断开,您也可以\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)
我还要补充@SoilSciGuy 的答案,如果您只想修改一个标签,您可以在scale_x_discrete().
myplot + scale_x_discrete(labels = c("Ambystoma mexicanum" = "Ambystoma\nmexicanum")
Run Code Online (Sandbox Code Playgroud)