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