2012-12-02 41 views
2

我想在同一個圖上繪製兩種方法m1和m2返回的結果。在我的特殊情況下,第一個方法的標籤是一個表達式(因爲它有一個下標),第二個方法的標籤位於兩行(因爲它很長)。不過,有這兩個要求不工作:在R中,如何將表達式與圖例標籤中兩行的字符串結合起來?

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。

回答

3

您可以使用y.intersepcex參數。

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

+0

感謝,但它是一種黑客攻擊的;)我希望它正確地放置符號的解決方案(PCH = 1),在2號線的中間。我也嘗試玩「adj」,但它做得不好。我想我必須完全手工製作傳奇。 – tflutre

+0

@wfoolhill我們做不到!但是很容易破解圖例代碼。這個http://stackoverflow.com/questions/13644149/increasing-the-size-of-the-coloured-squares-on-histogram-legends-in-r應該可以幫到你 – agstudy

相關問題