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

Ger*_*son 4 r subscript ggplot2

我正在使用 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))
Run Code Online (Sandbox Code Playgroud)

颜色 1 包含

  "O[3] some additional text"
Run Code Online (Sandbox Code Playgroud)

图例显示为“O[3] 一些附加文本”,而不是带有下标的 3。

Bri*_*ggs 6

问题是您需要比例尺中的标签是一个表达式,以便在渲染时根据plotmath. 但是,ggplot使用data.frames 和data.frames 的作品不能有作为表达式向量的列。所以解决这个问题的方法是将信息存储为plotmath表达式的文本(字符串)版本,作为制作标签的最后一步,将它们转换为表达式。这是可以完成的,因为labels缩放函数的参数本身可以是一个可以转换/格式化标签的函数。

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

color1 <- paste(gasSubscript,"*\" some additional text\"")
Run Code Online (Sandbox Code Playgroud)

这是现在可以制作成表达式的格式。

> color1
[1] "O[3] *\" some additional text\""
> cat(color1)
O[3] *" some additional text"
> parse(text=color1)
expression(O[3] *" some additional text")
Run Code Online (Sandbox Code Playgroud)

使用这种格式,您可以强制比例尺将标签解释为表达式,这将导致它们按照plotmath.

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

在此处输入图片说明

使用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))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明