35

我正在尝试使用以下标签标记情节:

“Some Assay 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="")
4

4 回答 4

59

你想要一个组合bquote()和一点plotmath fu:

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

~是一个间距运算符,*意味着将内容并列到运算符的左侧和右侧。在bquote()中,任何包裹在里面的东西.( )都会被查找并替换为命名对象的值;so.(assay)将在表达式中替换为Some Assay.

于 2013-02-25T18:55:04.027 回答
3

使用 tidy_eval 方法你可以做

library(rlang)

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

表达式和!! 包含在 tidyverse 中,因此您实际上不需要加载 rlang。我只是把它放在那里,以明确它们来自哪里。

于 2018-12-04T10:31:10.897 回答
2

你也可以试试穷人的方法:

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

它直接指定 mu 字符而不是使用表达式(并且paste0只是pastewith sep = "")。

于 2013-02-25T18:58:02.843 回答
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 将创建一个表达式,用它们的值替换包裹在 .( ) 中的元素。所以一个好的答案是:

plot(0,xlab='')
Lines <- bquote(paste(.(assay)," AC50 (",mu,"M)",sep=""))
mtext(Lines,side=1,line=3)
于 2013-02-25T18:59:50.533 回答