【发布时间】:2013-04-19 22:17:07
【问题描述】:
如何在 Rpy2 中的 ggplot2 图中制作像 "$\alpha$ + $\beta$ is my label" 这样的 x 或 y 标签?我尝试使用r.expression 在情节上获取任何希腊字母:
p = ggplot2.ggplot(mydata) + r.xlab(r.expression("alpha"))
但这不起作用。希腊字母如何与常规文本一起绘制?
【问题讨论】:
如何在 Rpy2 中的 ggplot2 图中制作像 "$\alpha$ + $\beta$ is my label" 这样的 x 或 y 标签?我尝试使用r.expression 在情节上获取任何希腊字母:
p = ggplot2.ggplot(mydata) + r.xlab(r.expression("alpha"))
但这不起作用。希腊字母如何与常规文本一起绘制?
【问题讨论】:
R 的expression() 接受对象、调用或表达式并返回一个表达式(这是一种操作未计算代码的方法)。 expression("alpha") 返回字符串 "alpha"(就像写在 R 中的 expression("alpha") 一样。
获取表达式的一种方法是解析字符串。在问题中使用您的示例:
from rpy2.rinterface import parse
p = ggplot2.ggplot(mydata) + scale_x_continuous(parse("alpha"))
如果您想将表达式(即语法上有效的 R 代码)与一般文本(无法解析为代码的内容,例如使用空格和标点符号)混合使用,您必须
使用 R 的 paste() in 来解析代码(这可能看起来很深奥,但就是这样
也必须在 R 中执行):
p = ggplot2.ggplot(mydata) + \
ggplot2.scale_x_continuous(parse('paste(alpha, " and ", beta)'))
【讨论】:
scale_x_continuous(parse("alpha") + " and " + parse("beta")),我会收到混合类型的错误:TypeError: unsupported operand type(s) for +: 'rpy2.rinterface.SexpVector' and 'str'