2013-03-08 76 views
7

我为多个数据集生成一个图。每个数据集都应该有它自己的图例,这些图例可能包含希腊字母,图形符号或者子和超字符。我想在循环中生成图例文本。在R图的图例文本中使用子/上标和特殊字符

Bquote工作正常,如果只有一个图例文本。如果我尝试添加additinal传说的文本,该plotmath-commads迷路了,...

x <- 0:10 
y1 = x * x 
y2 = x * 10 

plot (1,1, type="n", xlab=bquote(Omega), ylab="Y", las=1, xlim=range(x), ylim=range(y1, y2)) 
lines(x, y1, col=1, pch=1, type="b") 
lines(x, y2, col=2, pch=2, type="b") 

# generate legend texts (in a loop) 
legend_texts = c(
    bquote(Omega^2) 
    , bquote(Omega%*%10) 
) 
# Using a single bquote works fine: 
#legend_texts = bquote(Omega^2) 
#legend_texts = bquote(Omega%*%10) 

legend(
    "topleft" 
    , legend = legend_texts 
    , col = c(1:2) 
    , pch = c(1:2) 
    , lty = 1 
) 
+1

+1可重现的例子! – A5C1D2H2I1M1N2O1R2T1 2013-03-08 07:39:52

回答

4

更改 “legend_texts” 到:

# generate legend texts (in a loop) 
legend_texts = c(
    as.expression(bquote(Omega^2)) 
    , as.expression(bquote(Omega%*%10)) 
) 

从帮助页面?legend, “传奇”参数描述为:

一个字符或表达式向量。长度≥1以出现在图例中。其他对象将被as.graphicsAnnot强制。

输出:

enter image description here

+0

这里有轻度阅读障碍。帮助页面读取“表达式向量”,而不是“表达式向量”。 :) – A5C1D2H2I1M1N2O1R2T1 2013-03-08 07:48:25

6

试试这个:

legend_texts = expression(
    Omega^2, Omega*10) 

legend(
    "topleft" 
    , legend = legend_texts 
    , col = c(1:2) 
    , pch = c(1:2) 
    , lty = 1 
    ) 

我不能告诉你,如果想Omega^10Omega*10Omega%*%10,但他们都将产生可接受的plotmath表达式。

enter image description here

+0

比我一遍又一遍地使用'as.expression'更好。 +1 – A5C1D2H2I1M1N2O1R2T1 2013-03-08 07:45:09

+0

当使用'表达式'函数时,通过用逗号分隔元素来创建一个多值表达式向量。 – 2013-03-08 07:50:05

+0

谢谢。我只是重新阅读帮助页面并得出结论。 :) – A5C1D2H2I1M1N2O1R2T1 2013-03-08 07:51:14