将数学符号和下标与常规字母混合使用

66

我想在ggplot2中绘制一个标签,如下所示:

Value is $\sigma$,R^{2} = 0.6其中Value is为普通字体,$\sigma$是希腊小写sigma字母,R^{2} = 0.6显示为一个带有上标2R,后跟等于号(=)和0.6。如何在ggplot的factor和R的xlab、ylab等参数中使用?

2个回答

76

类似这样:

g <- ggplot(data=data.frame(x=0,y=0))+geom_point(aes(x=x,y=y))
g+ xlab( expression(paste("Value is ", sigma,",", R^{2},'=0.6')))

编辑

另一个选项是使用带有parse=Tannotate

g+ annotate('text', x = 0, y = 0, 
        label = "Value~is~sigma~R^{2}==0.6 ",parse = TRUE,size=20) 

enter image description here

编辑

如果在绘图过程中计算常数0.6,则paste方法可能会很有用。

r2.value <- 0.90
g+ xlab( expression(paste("Value is ", sigma,",", R^{2},'=',r2.value)))

3
如果你想要表示希腊字母 sigma,可以尝试使用 \u03c3 - IRTFM
20
在plotmath中,paste从未给我留下一个好印象;尝试使用xlab(bquote(Value~is~sigma~R^{2}==.(r2.value)))代替。 - baptiste
11
如果有人不知道,baptiste 是一个真正的情节大师。如果你想学习更多关于 R 绘图系统的知识,只需查看他在 SO 上的许多答案,并从一位大师那里学习。 - IRTFM
1
我不确定是否应该提出另一个问题,但是"r2.value; ..."对我没有起作用。xlab显示的是re.value而不是0.9。我做错了什么吗?使用bquote可以解决问题。非常感谢。 - Ed Mendes
1
“在绘图期间”是什么意思?我已经这样做了,但是得到的是文本“r2.value”,而不是它的值。 - breezeintopl
显示剩余5条评论

51

与paste()相比,可能更直接的方法是:

g <- ggplot(data=data.frame(x=0,y=0))+geom_point(aes(x=x,y=y))
 g + xlab( expression(Value~is~sigma~R^{2}==0.6))
 # ~ for spaces, and * for no-space between (unquoted) expressions

通常情况下,如果使用正确的绘图数学连接符,则不需要使用paste和所有这些成对引号。即使您想要创建一个希腊字母,您所需做的就是将其用引号括起来,并在每个侧面加上*~。向绘图数学表达式的新手提供paste的一个问题是,他们会认为它与语言中的其他paste相同。请注意,保留HTML标记。

我认为annotate函数的'labels'参数采用字符模式。你可以查找已安装的无衬线字体中“sigma”可能具有的Unicode值。 - IRTFM
1
对于使用lattice的用户,需要注意:此解决方案也适用于lattice绘图。即 xyplot(y~x,dat=data.frame(x=0,y=0),xlab=expression(Value~is~sigma~R^{2}==0.6)) - agstudy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接