3
我想在下面的示例中使用上標作爲標籤。不過,我不想把代碼他們,我希望他們去到3 ^水平,其中水平是一個常數R:以編程方式生成帶上標的圖軸中斷標籤(以編程方式強調)
library(ggplot2)
LEVELS = 4
mylabels = c(
expression(paste(3^4,"= 81")),
expression(paste(3^3,"= 27")),
expression(paste(3^2,"= 9")),
expression(paste(3^1,"= 3")),
expression(paste(3^0,"= 1")))
mylabels
length(mylabels)
df=data.frame(x=runif(40),y=(runif(40)*10)%%5)
p = ggplot(df,aes(x,y)) +
geom_point() +
scale_y_continuous(breaks = 0:LEVELS, labels = mylabels)
p
硬編碼verison完美的作品。但我似乎無法以編程方式獲得它。以下內容:
mylabels=c(paste("expression(paste(3^",LEVELS:0,'," = ',3^(LEVELS:0),'"))',sep=""))
在圖表中未正確評估(例如,它在標籤中寫入「表達式」等詞語)。它創建:
[1] "expression(paste(3^4,\" = 81\"))" "expression(paste(3^3,\" = 27\"))" "expression(paste(3^2,\" = 9\"))"
[4] "expression(paste(3^1,\" = 3\"))" "expression(paste(3^0,\" = 1\"))"
和我要的是:
expression(paste(3^4, "= 81"), paste(3^3, "= 27"), paste(3^2,
"= 9"), paste(3^1, "= 3"), paste(3^0, "= 1"))
搞砸有關與崩潰,noquote,EVAL,sprintf的,等
PLUS1做得好..我是浪費了太多的時間在這個替代
。 (似乎你可以簡化它'mylabels < - parse(text = sprintf('3 ^%d ==%d',LEVELS:0,3 ^(LEVELS:0)))',但我不知道這是否會來back and bite – user20650
@ user20650優秀的一點,你的簡化在這裏工作唯一的警告是,如果'3 ^%d'右邊的標籤不是有效的R語法,那麼它將不起作用,因爲'parse()'不能將它解析成一個有效的R解析樹,但是由於在這種情況下它是有效的語法,所以它可以工作。 – bgoldst