我认为有两个简单的 Select :修改标签,使其包括变量名;或者创建一个结合了label_both
和label_wrap_gen
实用程序的新函数.
我会把width=
从10改为6,这样我们就能看到效果了.
未更改:
ggplot(df, aes(x, y)) +
geom_point() +
facet_grid(a~b, labeller = label_both)
Option 1: change the faceting variables
这可能是最简单的:
transform(df, a = paste("a:", a), b = paste("b:", b)) |>
ggplot(aes(x, y)) +
geom_point() +
facet_grid(a~b, labeller = label_wrap_gen(6))
我用了transform
,可以用$<-
或dplyr::mutate
,或者其他几种方法中的一种.这可以被泛化,以便在需要时可以通过编程来完成.当做这样的事情时,我really更喜欢如上所述地做inline,并且不在df
中改变静态数据;做后一种做法有可能使我两次应用它们和/或使它们出现在不需要组合的绘图后渲染(更多的图、表)中.在这种情况下,内联操作会更"安全"一些.
Option 2: custom function
label_wrap_gen_both <- function(width = 25, multi_line = TRUE, sep = ": ") {
fun <- function(labels) {
value <- label_value(labels, multi_line = multi_line)
variable <- ggplot2:::label_variable(labels, multi_line = multi_line)
if (multi_line) {
out <- vector("list", length(value))
for (i in seq_along(out)) {
out[[i]] <- paste(variable[[i]], value[[i]], sep = sep)
}
}
else {
value <- inject(paste(!!!value, sep = ", "))
variable <- inject(paste(!!!variable, sep = ", "))
out <- Map(paste, variable, value, sep = sep)
out <- list(unname(unlist(out)))
}
lapply(out, function(st)
vapply(strwrap(st, width = width, simplify = FALSE), paste, character(1), collapse = "\n"))
}
structure(fun, class = "labeller")
}
ggplot(df, aes(x, y)) +
geom_point() +
facet_grid(a~b, labeller = label_wrap_gen_both(6))
(剧情同上)