考虑以下具有长facet/strip文本的ggplot2图断成两行。文本超出了专门用于方面标题的区域。
library(ggplot2)
x <- c(1:3, 1:3)
y <- c(3:1, 1:3)
grp <- c(0, 0, 0, 1, 1, 1)
p <- qplot(x=x, y=y) + geom_line() + facet_wrap(~ grp)
grob <- ggplotGrob(p)
strip.elem.y <- grid.ls(getGrob(grob, "strip.text.x",
grep=TRUE, global=TRUE))$name
grob <- geditGrob(grob, strip.elem.y[1],
label="First line andn second line" )
grid.draw(grob)
有没有办法增加条形文本区域的高度?
ggplot2支持使用label_wrap_gen
的内置方式。
x <- c(1:3, 1:3)
y <- c(3:1, 1:3)
grp = c(rep("group 1 with a long name",3),rep("group 2 with a long name",3))
d = data.frame(x = x, y =y, grp = grp)
ggplot(d, aes(x=x,y=y)) + geom_line() + facet_wrap(~ grp, labeller = label_wrap_gen(width=10))
您可以使用双线标签:
grp <- c(rep("foonbar",3), 1, 1, 1)
qplot(x=x, y=y) + geom_line() + facet_wrap(~ grp)
我尝试了多种方法,但很沮丧,因为paste(strwrap(text, width=40), collapse=" n")
给了我单行数据的结果,而没有连接整个列表中的每一位文本。
我想出了一个最适合我的解决方案。我写了一个函数,如下所示。给定具有列text
的数据帧data
wrapit <- function(text) {
wtext <- paste(strwrap(text,width=40),collapse=" n ")
return(wtext)
}
data$wrapped_text <- llply(data$text, wrapit)
data$wrapped_text <- unlist(data$wrapped_text)
调用此函数后,我只是将labeller
函数应用于wrapped_text
列,而不是text
列。
扩展@groceryheist中的有用示例,我们可以使用参数multi_line = True
和label_wrap_gen()
来获得所需的效果,而无需指定固定的宽度。
library(ggplot2)
x = c(1:3, 1:3)
y = c(3:1, 1:3)
grp = c(rep("group 1 with a very very very long name",3),
rep("group 2 with an even longer name",3))
df = data.frame(x = x, y =y, grp = grp)
ggplot(df, aes(x,y)) +
geom_line() +
facet_wrap(~ grp,
labeller = label_wrap_gen(multi_line = TRUE))
参考编号:https://ggplot2.tidyverse.org/reference/labellers.html