我正在尝试找出如何在轴标签中使用下标字母。
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()
。以下示例提供了奇怪的行为:
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解析器运行。字符串或 token 1d
不是有效的R token 。可以将其包含在有效的R token 中,并与非空间运算符“连接”,对它进行反选,或使用普通引号。我认为这是比使用paste
更好的方法:
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中的标记(或“名称”或“符号”)不应以数字开头。因此,您可以通过引用引号或通过使用非空格分隔符
1
运算符分隔d
和*
来解决该限制。用合法的R符号或标记“连接”或“连接”纯数字文字。要获得一个未下标的百分号:
ggplot(dat, aes(x=x,y=y)) +
geom_point() +
labs(y=expression(Blah[1*d]*"%"))
将括号放在pct符号周围:
expression(Blah[1*d]*"(%)")
%
字符在R解析中具有特殊含义,因为它表示用户定义的中缀运算符的开始。因此,将其用作文字需要对其进行引用。相同的推理要求用“for”和“in”引号,因为它们在R的“保留字”组中。还有其他保留字(但是for
和in
是最常使我绊倒的那些)。类型: ?Reserved
另外一个“技巧”是如果需要将斜体字加在
italic()
中的数字周围,请使用引号。未引用的数字不会在该函数内变为斜体。注意:
paste
是绘图函数,但的语义与base::paste function
不同。特别是它没有“sep”参数。因此,您永远无法在打印的参数之间获得空格,并且如果您尝试放置非空格项目,则所有其他参数之后都会出现一个实例。paste0
不是一个plotmath函数,因此不会被解释,而是会在括号内包含未处理的参数,而显示为“未处理”。关于r - ggplot轴标签中的下标字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17334759/