2

我想在同一个图上绘制两种方法 m1 和 m2 返回的结果。在我的特殊情况下,第一种方法的标签是一个表达式(因为它有一个下标),第二种方法的标签在两行上(因为它很长)。但是,有这两个要求是行不通的:

l <- list("m1"=list(data=1:10, col=2, label=expression(paste("method 1 (", X[a], ")"))))
l[["m2"]] <- list(data=rep(3,10), col=3, label="method 2 (with a\nlong explanation)")
plot(l[["m1"]]$data, col=l[["m1"]]$col); points(l[["m2"]]$data, col=l[["m2"]]$col)
legend("topleft", legend=c(l[["m1"]]$label, l[["m2"]]$label), col=c(l[["m1"]]$col, l[["m2"]]$col), pch=1)

正如您在图例中看到的那样,第二个标签(两行上的一个)与第一个标签重叠。

当我不对第一个标签使用表达式时,问题就消失了:

legend("topleft", legend=c("method 1 (Xa)", l[["m2"]]$label), col=c(l[["m1"]]$col, l[["m2"]]$col), pch=1)

当第二个标签在一行时,问题也会消失:

legend("topleft", legend=c(l[["m1"]]$label, "method 2 (with a long explanation)"), col=c(l[["m1"]]$col, l[["m2"]]$col), pch=1)

但是,我真的需要表达式和两行。任何想法?

ps:我在 Lubuntu 上使用 R 2.14.1。

4

1 回答 1

3

You can play with y.intersep and cex parameters.

legend("topleft", 
       legend=c(l[["m1"]]$label, 
                l[["m2"]]$label),
       col=c(l[["m1"]]$col,l[["m2"]]$col), 
       pch=0.5,title.adj=100,cex=0.8,y.intersp=2
       )

enter image description here

于 2012-12-02T02:10:46.750 回答