我正在尝试使用以下标签来标记绘图:
“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="")
您想要
bquote()
和一点绘图数学的组合:
assay <- "Some Assay"
xlab <- bquote(.(assay) ~ AC50 ~ (mu*M))
plot(0, xlab = xlab)
~
是一个间距运算符,*
表示将内容并列在运算符的左侧和右侧。在 bquote()
中,任何包含在 .( )
中的内容都将被查找并替换为命名对象的值;因此表达式中的 .(assay)
将被替换为 Some Assay
。
使用 tidy_eval 方法你可以做
library(rlang)
assay <- "Some Assay"
plot(0,xlab=expr(paste(!!assay," AC50 (",mu,"M)",sep="")))
expr 和 !!包含在 tidyverse 中,因此您实际上不需要加载 rlang。我把它放在那里只是为了明确它们来自哪里。
使用
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)
你也可以尝试穷人的方法:
assay <- "Some Assay"
plot(0, xlab = paste0(assay, " AC50 (µM)"))
它直接指定 mu 字符,而不是使用表达式(
paste0
只是 paste
与 sep = ""
)。
将
expression()
替换为 eval()
+ parse()
在包含字符串变量时有效。
请注意,所有空格都必须替换为
~
,因此在下面的 gsub
变量上调用 assay
。我已经替换了标签其余部分中的空格(例如 " AC50 (mu*M)"
--> "~AC50~(mu*M)"
)
assay <- "Some Assay"
plot(0,xlab=eval(parse(text = paste0(gsub(' ', '~', assay),"~AC50~(mu*M)"))))