2013-03-08 45 views
2

我試圖在R圖中生成一個美麗的圖例。我有一個factor=1e-5,應該很好地顯示在圖例中的格式。我在包sfsmisc中發現了一個很好的功能,它將數字轉換爲表達式。要將這個表達式添加到我的bquote命令中,似乎需要將它轉換爲一個調用。不幸的是,在字符串的末尾添加了大括號(10^-5())。用指數變換數字來繪製R中美麗的圖例的命令

有沒有辦法避免添加大括號?還是有更簡單的方法來將數字轉換爲plotmaths命令以供它們在圖例中使用? (沒有做手工)

factor = 1e-5 
alpha = 1:10 
omega = alpha^2 * factor 

plot (
    alpha 
    , omega 
    , xlab=bquote(alpha) 
    , ylab=bquote(omega) 
    , type="b" 
) 

text = expression() 

# standard version 
text[1] = as.expression(bquote(alpha%*%.(factor))) 

# beautified version (use pretty10exp from sfsmisc package!?) 
library("sfsmisc") 
pretty = as.call(pretty10exp(factor, drop.1=T)) 
text[1] = as.expression(bquote(alpha^2%*%.(pretty))) 

# add legend 
legend("topleft", legend=text, pch=1, lty=1) 

screenshot: red arrow points at the braces that should not be there

回答

3

這裏是你,而不是做什麼用功能parse

text <- paste("alpha^2%*%",parse(text=pretty10exp(factor,drop.1=T)),sep="") 
text 
[1] "alpha^2%*%10^-5" # which we then use as the expression in your call to legend 
legend("topleft", legend=parse(text=text), pch=1, lty=1) 

?parse更多解釋這是如何工作的。

+0

不錯的解決方法,...我認爲有更簡單的方法。無論如何,首先生成plotmath命令,然後解析它,仍然很直觀,... – 2013-03-08 11:13:33

+0

是的,我試圖找到一種方法來直接連接兩個表達式(一個與alpha和pretty10exp輸出),但不能不需要像這裏那樣建立一個字符串作爲前面的步驟。 – plannapus 2013-03-08 11:18:06