是否可以bquote在 ggplot2 custom labellers 的某些實體中正確使用?以下示例不會產生所需的輸出(并且不會顯示任何警告/錯誤):
library(ggplot2)
data(Orange)
Orange$tree2 <- paste0("T", Orange$Tree)
tree.lab <- c(
T1 = bquote("Tree 1"[test]),
T2 = "Tree 2",
T3 = "Tree 3",
T4 = "Tree 4",
T5 = "Tree 5"
)
ggplot(Orange, aes(x = age, y = circumference))
facet_wrap(~tree2, labeller = labeller(tree2 = tree.lab))
geom_point()
以下舊式代碼仍然有效,但已棄用(ggplot2 3.3.5 版警告“警告訊息:標簽器 API 已更新。現在不推薦使用標簽器獲取variable和value引數。請參閱標簽器檔案。”):
vlabeller <- function (variable, value) {
return(tree.lab[value])
}
ggplot(Orange, aes(x = age, y = circumference))
facet_wrap(~tree2, labeller = vlabeller)
geom_point()
如今,這樣做的正確方法是什么?即使沒有bquote...
uj5u.com熱心網友回復:
基本上,對于您的串列,您可能希望更新vlabeller以使用該as_labeller功能。該default=identity防止的表達被脅迫回文本。
vlabeller <- as_labeller(function (value) {
tree.lab[value]
} , default=identity)
為了避免 bquote,您可以使用運算式串列。這是一個幫助函式,可以使它更容易使用。
label_expressions <- function(values) {
stopifnot(is.expression(values))
as_labeller(function(x) {
if (is.null(names(values))) {
x <- seq_along(x)
if (length(x)!=length(values)) warning(paste0("Number of labels(",
length(values), ") does not match number of values (", length(x), ")"))
}
as.list(values[x])
}, default=identity)
}
然后你可以繪制你的情節
tree.lab <- expression(
T1 = "Tree 1"[test],
T2 = "Tree 2",
T3 = "Tree 3",
T4 = "Tree 4",
T5 = "Tree 5"
)
ggplot(Orange, aes(x = age, y = circumference))
facet_wrap(~tree2, labeller = label_expressions(tree.lab))
geom_point()
請注意,這tree.lab是一個運算式物件,因此不會決議所有值并保留語言物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/338247.html
