R - 解释 ggplot 中使用的变量中的下标

R - Interpreting a subscript in a variable used in ggplot

我正在使用 ggplot 绘制一些多线图,这些图由大量变量和粘贴的使用构成。我一直没弄明白如何让O3中的下标3出现在下面的简化版代码中。

gasSubscript <- "O[3]"
color1 <- paste(gasSubscript,"some additional text")
df <- data.frame(x = c(1,2,3,4,5,6,7,8,9,10), y = c(10,9,8,7,6,5,4,3,2,1))
testPlot <- ggplot(data = df, aes(x = x)) + geom_line(aes(y = y, color = color1))

color1 包含

  "O[3] some additional text"

图例显示为 "O[3] some additional text" 而不是下标 3.

我认为这应该符合您的要求。我花了一点时间来调整粘贴和表达的正确顺序。

require(ggplot2)
test <- data.frame(x = c(1,2,3,4,5,6,7,8,9,10), y = c(10,9,8,7,6,5,4,3,2,1))
colour1 <- "1"

testPlot <- ggplot(data = test, aes(x = x)) + geom_line(aes(y = y, colour = colour1))
testPlot + scale_colour_discrete(labels = c(expression(paste(O[3], "some other text here"))))

它也returns警告

Warning message:
In is.na(scale$labels) :
  is.na() applied to non-(list or vector) of type 'expression'

对此我找不到解释。

问题是你需要scale里面的label是一个表达式,这样渲染的时候,按照plotmath的规则渲染。但是,ggplotdata.frames 一起使用,而 data.frames 不能有作为表达式向量的列。所以解决这个问题的方法是将信息存储为 plotmath 表达式的文本(字符串)版本,并且作为制作标签的最后一步,将它们转换为表达式。这是可以做到的,因为比例函数的 labels 参数本身可以是一个可以 transform/format 标签的函数。

将此与您的示例放在一起:

color1 <- paste(gasSubscript,"*\" some additional text\"")

这是一种可以变成表达式的格式。

> color1
[1] "O[3] *\" some additional text\""
> cat(color1)
O[3] *" some additional text"
> parse(text=color1)
expression(O[3] *" some additional text")

使用该格​​式,您可以强制秤将标签解释为表达式,这将使它们按照 plotmath 的规则呈现。

testPlot <- ggplot(data = df, aes(x = x)) + 
  geom_line(aes(y = y, color = color1)) +
  scale_colour_discrete(labels = function(x) parse(text=x))

使用 labels 函数方法也适用于存储在 data.frame 中的数据,只要字符串经过格式化以便可以解析。

DF <- data.frame(x=1:4, y=rep(1:2, times=2), 
                 group = rep(c('O[3]*" some additional text"', 
                               'H[2]*" some different text"'), each = 2))

ggplot(DF, aes(x, y, colour=group)) + 
  geom_line() +
  scale_colour_discrete(labels=function(x) parse(text=x))