将数据框变量添加到 ggplot2 facet 标签
Add data frame variable to ggplot2 facet label
我想根据绘图所基于的数据将一些附加信息添加到 ggplot 绘图的刻面标签中。由于各种原因,我试图在事后执行此操作,而不是依赖对数据的临时更改。
我尝试在 label_wrap_gen
上为我的标签函数建模,我想我也可以添加一个数据框变量作为函数的参数,而不只是 label_wrap_gen
接受的固定数字。
但是,这并不像预期的那样有效。我得到的不是最左边所需的“4 (5)”,而是“4 ()”。问题似乎是 app_n
没有得到实际数据,或者类似的东西。如果不使用 .data$en
(下图)而只使用 en
,我会收到一个未找到变量的错误。
app_n <- function(.n) {
fun <- function(labels) {
labels <- label_value(labels, multi_line = TRUE)
lapply(labels, function(x) {
x <- paste0(x, '(', .n, ')')
vapply(x, paste, character(1), collapse = "\n")
})
}
structure(fun, class = 'labeller')
}
mtcars %>%
group_by(cyl) %>%
mutate(en = 5) %>%
ggplot(aes(drat, wt)) +
facet_wrap(~ cyl, labeller = app_n(.n = .data$en))
我之所以选择这条路线,是因为在我的实际应用程序中,我试图将样本大小添加到方面标签,并且出于诸如“我想了解这是否可能”之类的原因以及“代码已经够复杂了”我先尝试走这条路
这完全可以吗? (是的,我知道这可能会导致将向量作为文本插入。虽然这对我的实际情节不起作用,但在这个阶段我很乐意得到那个结果)
通过将 .data
更改为 .
并使用 {}
让管道知道有两个数据参数。
mtcars %>%
group_by(cyl) %>%
mutate(en = 5) %>%
{ggplot(., aes(drat, wt)) +
facet_wrap(~ cyl, labeller = app_n(.n = .$en))}
这 returns 预期的标签。
但是,使用数据框变量本身来标记您的构面意味着构面与行一样多。否则仅使用前几个标签并返回警告。
我想根据绘图所基于的数据将一些附加信息添加到 ggplot 绘图的刻面标签中。由于各种原因,我试图在事后执行此操作,而不是依赖对数据的临时更改。
我尝试在 label_wrap_gen
上为我的标签函数建模,我想我也可以添加一个数据框变量作为函数的参数,而不只是 label_wrap_gen
接受的固定数字。
但是,这并不像预期的那样有效。我得到的不是最左边所需的“4 (5)”,而是“4 ()”。问题似乎是 app_n
没有得到实际数据,或者类似的东西。如果不使用 .data$en
(下图)而只使用 en
,我会收到一个未找到变量的错误。
app_n <- function(.n) {
fun <- function(labels) {
labels <- label_value(labels, multi_line = TRUE)
lapply(labels, function(x) {
x <- paste0(x, '(', .n, ')')
vapply(x, paste, character(1), collapse = "\n")
})
}
structure(fun, class = 'labeller')
}
mtcars %>%
group_by(cyl) %>%
mutate(en = 5) %>%
ggplot(aes(drat, wt)) +
facet_wrap(~ cyl, labeller = app_n(.n = .data$en))
我之所以选择这条路线,是因为在我的实际应用程序中,我试图将样本大小添加到方面标签,并且出于诸如“我想了解这是否可能”之类的原因以及“代码已经够复杂了”我先尝试走这条路
这完全可以吗? (是的,我知道这可能会导致将向量作为文本插入。虽然这对我的实际情节不起作用,但在这个阶段我很乐意得到那个结果)
通过将 .data
更改为 .
并使用 {}
让管道知道有两个数据参数。
mtcars %>%
group_by(cyl) %>%
mutate(en = 5) %>%
{ggplot(., aes(drat, wt)) +
facet_wrap(~ cyl, labeller = app_n(.n = .$en))}
这 returns 预期的标签。
但是,使用数据框变量本身来标记您的构面意味着构面与行一样多。否则仅使用前几个标签并返回警告。