如何在 ggplot2 的比例函数中正确使用表达式?

How to properly use an expression in a scale function in ggplot2?

我正在用 ggplot2 绘制一些结果。数据组织在数据框中,结构如下:

   category  comparison    value
1  A         deltaXT/FT    6807
2  B         deltaXT/FT    11894
3  C         deltaXT/FT    1215
4  D         deltaXT/FT    42862
5  E         deltaXT/FT    34313
...

在同一个数据框中,总共有 4 个比较,每个都细分为类别 A-E(该图看起来像 this)。 我的目标是将 "deltaXT/FT" 替换为“ΔXT/FT”,使用希腊符号表示 Delta。

在图中,我使用 "comparison" 列来定义条形的颜色,如下所示:

ggplot(data=vars, aes(x=category, y=value, fill=comparison)) + 
...
scale_fill_manual(values=c("deltaXT/FT"="#6FA9BC"), ...)

基本上,当我在 scale_fill_manual 和原始数据框中使用 "deltaXT/FT" 时,一切正常。如果我尝试使用 expression(Delta * "XT/FT")="#6FA9BC", ...) 我得到这个错误:

Error: unexpected '=' in:
...
scale_fill_manual(values=c(expression(Delta * "XT/FT"))="

问题似乎出在 scale_fill_manual()expression() 不能用作其中的键。我在 Whosebug 中阅读了其他主题,建议人们使用 bquote(expression()=value) 但在使用时错误没有改变。

关于如何解决这个问题并在图例中有一个漂亮的 ΔXT/FT 名称有什么建议吗?

编辑:将 Δ 字符复制粘贴到需要的 Rscript 中,但我更感兴趣的是 expression() 是否可以在这种情况下用作一般情况下的键。

您可以只更改与每个 comparison 关联的标签,而不是映射它的值。

... +
scale_color_manual(values = c("deltaXT/FT" = "#6FA9BC"), 
                   labels = c("deltaXT/FT" = expression(Delta * "XT/FT")))

或者,在一个完整的情节中:

library(ggplot2)
ggplot(data=df, aes(x=category, y=value, color=comparison)) + 
  geom_point(size = 5) +
  scale_color_manual(values=c("deltaXT/FT"="#6FA9BC"), 
                     labels = expression(Delta * "XT/FT"))

数据:

df <- read.table(text = ' category  comparison    value
1  A         deltaXT/FT    6807
                 2  B         deltaXT/FT    11894
                 3  C         deltaXT/FT    1215
                 4  D         deltaXT/FT    42862
                 5  E         deltaXT/FT    34313', header = TRUE)