关于r:ggplot轴标签中的下标字母

Subscript letters in ggplot axis label

我正在尝试找出如何在轴标签中使用下标字母。

1
2
3
4
5
6
7
8
9
dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1]))

dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1d]))

第一个示例仅是一个数字而起作用,只要方括号中有一个字符,它就会失败。 Blah [subscript(1d)]本质上是我所需要的,但是我无法弄清楚如何让它在下标中包含字母。 我尝试了各种变体,包括paste()

以下示例提供了奇怪的行为:

1
2
3
4
labs(y=expression(Blah[12])) # this works
labs(y=expression(Blah[d])) # this works
labs(y=expression(Blah[d1])) # this works
labs(y=expression(Blah[1d])) # this fails

有什么想法吗?


最后一个失败的原因是表达式的参数通过R解析器运行。字符串或令牌1d不是有效的R令牌。可以将其放入有效的R令牌中,并与非空间运算符"连接",对它进行反选,或使用普通引号。我认为这是比使用paste更好的方法:

1
2
3
4
5
6
 ggplot(dat, aes(x=x,y=y)) +
     geom_point() +
     labs(y=expression(Blah[1*d]))
 ggplot(dat, aes(x=x,y=y)) +
     geom_point() +
     labs(y=expression(Blah["1d"]))

R中的标记(或"名称"或"符号")不应以数字开头。因此,您可以通过引用或使用非空格分隔符*运算符分隔1d来解决该限制。该"连接"或"连接"带有合法R符号或标记的纯数字文字。

要获得不下标的百分号:

1
2
3
 ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1*d]*"%"))

将括号放在pct符号周围:

1
expression(Blah[1*d]*"(%)")

%字符在R解析中具有特殊含义,因为它表示用户定义的中缀运算符的开始。因此,将其用作文字要求对其进行引用。相同的推理要求用" for"和" in"引号,因为它们在R的"保留字"组中。还有其他保留字(但是forin是使我绊倒的那些字)最常见。)类型:

1
 ?Reserved

另外一个"技巧"是如果需要将其用斜体字括起来,请在italic()中的数字前后使用引号。未引用的数字不会在该函数内变为斜体。

注意事项:paste是绘图函数,但它的语义与base::paste function不同。特别是它没有" sep"参数。因此,您永远无法在打印的参数之间获得空格,并且如果尝试放入非空格项目,则所有其他参数之后都会出现一个实例。

paste0不是绘图函数,因此不会被解释,而是会在圆括号内包含未处理的参数而显示为"未处理"。


好的。我发誓,尽管我很快就收到了它,但我并没有发布它只是为了自己回答(总是问你问题的方式!)

这里是:

1
2
3
ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1][d]))

认为最好发布答案而不是删除问题,因为这可能有一天会帮助其他人。

除了"布拉斯",我真正想要的是expression(paste("Hb", A[1]," (%)",sep=""))

为什么paste0()在这里不起作用超出了我的范围。