2013-02-25 59 views
22

我试图用下列标签标注一个图:使用变量r的表达式

“某些测定EC50(uM)”,其中“u”是微符号。

我目前有:

assay <- "Some Assay" 
plot(0,xlab=expression(paste(assay," AC50 (",mu,"M)",sep=""))) 

但是,让 “法EC50(UM)”,而不是所期望的 “一些分析EC50(UM)”。

对此提出建议?谢谢。

我也试过:

paste(assay,expression(paste(" AC50 (",mu,"M)",sep="")),sep="") 
+2

你是不是要编写'化验',然后'assay1'? – 2013-02-25 18:48:02

+0

是的,对不起。我修好了它。从我的代码复制一点速度。 – dayne 2013-02-25 18:50:48

回答

30

你想要的bquote()组合,有点plotmath福:

assay <- "Some Assay" 
xlab <- bquote(.(assay) ~ AC50 ~ (mu*M)) 
plot(0, xlab = xlab) 

~是间隔运营商和*手段并列的内容向左和运营商的权利。在bquote()中,将查找包含在.()中的任何内容并用指定对象的值替换;所以.(assay)将被替换为Some Assay的表达式。

+0

完美的作品,谢谢! – dayne 2013-02-25 18:57:12

+0

哇!谢谢! – Anthony 2015-01-23 20:37:57

2

您也可以尝试穷人的做法:

assay <- "Some Assay" 
plot(0, xlab = paste0(assay, " AC50 (µM)")) 

它指定亩字符,而不是直接使用表达式(和paste0只是pastesep = "")。

2

使用mtext和另一种选择bquote

plot(0,xlab='') 
Lines <- list(bquote(paste(assay," AC50 (",mu,"M)",sep=""))) 
mtext(do.call(expression, Lines),side=1,line=3) 

注意,我设置了xlab在第一标绘为null。

编辑 无需调用表达式,因为bquote将创建一个表达式,用它们的值替换包装在。()中的元素。所以一个goodanswer是:

plot(0,xlab='') 
Lines <- bquote(paste(.(assay)," AC50 (",mu,"M)",sep="")) 
mtext(Lines,side=1,line=3) 
+1

这违背了'bquote()'的要点,它是用它们的值替换包裹在'。()'中的元素来形成一个表达式。 – 2013-02-25 19:05:45

+0

@GavinSimpson谢谢,我明白你的观点。现在看起来好吗? – agstudy 2013-02-25 19:10:40