如何从字符向量中将表达式放入 ggplot title/label/legend 中?

How to put expression in ggplot title/label/legend from character vector?

我想用代码生成图例标签并将它们用作表达式,因为它们包含希腊字母和下标。但是标题也出现了同样的问题,并且更容易显示,所以我将在我的例子中使用它。

ggplot() + ggtitle(expression(beta[a]^{4}))

此代码按预期工作,我得到了一个带有 β 和下标和上标的漂亮标题。但是,如果我有一个字符串,我不能将它转换为一个表达式,或者至少它不能很好地显示在 ggplot 上。有谁知道如何 use/convert 字符类型向量作为 ggplot 的表达式?

title_expression <- "beta[a]^{4}"
ggplot() + ggtitle(as.expression(title_expression))

我的实际问题代码:

legend_labels <- c("beta[d]^{2}", "beta[d]^{3}")
dat <- data.frame(a = c(1,2,2,3), b = c("a", "a", "b", "b"))

ggplot(dat, aes(a, fill = b)) +
  geom_histogram(bins = 3) +
  scale_fill_manual(values = c("red", "blue"), labels = legend_labels)

创建表达式而不是字符串可能更可取。

如果要将字符串转为表达式,需要解析:

title_expression <- "beta[a]^{4}"
ggplot() + ggtitle(parse(text = title_expression))


dat <- data.frame(a = c(1,2,2,3), b = c("a", "a", "b", "b"))
legend_labels <- c("beta[d]^{2}", "beta[d]^{3}")

ggplot(dat, aes(a, fill = b)) +
  geom_histogram(bins = 3) +
  scale_fill_manual(values = c("red", "blue"), 
    labels = lapply(legend_labels, \(x) parse(text = x)))

如果您使用过时的 R 版本,请将 \(x) 替换为 function(x)

更新: 你可以使用 parse(text = ..)

ggplot(dat, aes(a, fill = b)) +
  geom_histogram(bins = 3) +
  scale_fill_manual(values = c("red", "blue"), labels = parse(text = legend_labels)) 

这里有一个方法 expression

legend_labels <- c(expression(beta[a]^4), expression(beta[a]^3))
dat <- data.frame(a = c(1,2,2,3), b = c("a", "a", "b", "b"))

ggplot(dat, aes(a, fill = b)) +
  geom_histogram(bins = 3) +
  scale_fill_manual(values = c("red", "blue"), labels = legend_labels)