繁体   English   中英

R:为情节标题,轴标签或图例创建拉丁语/希腊语表达的向量

[英]R: creating vectors of latin/greek expression for plot titles, axis labels, or legends

我想合并拉丁文和希腊文的矢量来生成情节标题,轴标签,图例条目等。我在下面提供了一个简单的例子。 我无法弄清楚如何以原生形式呈现希腊字母。 我已尝试过expressionparseapply paste命令的各种组合,但我无法对单个表达式(例如, expression("A ("*alpha*")")的情况下生成混合拉丁语/希腊语文本的代码进行矢量化expression("A ("*alpha*")")适用于单个表达式)。

data<-matrix(seq(20),nrow=5,ncol=4,byrow=TRUE)
colnames(data)<-c("A","B","C","D")
greek<-c(" (alpha)"," (beta)"," (gamma)"," (delta)")
matplot(data)
legend(1,max(data),fill=c("black","red","green","blue"),apply(matrix(paste(colnames(data),greek,sep=""),nrow=4,ncol=1),1,expression))

你能帮我解决一下legend()语句中的apply() legend()语句吗? 它需要一些修改才能产生所需的输出(即A(α),B(β),C(γ),D(δ))。 提前致谢。

这是一个避免使用parse()的替代方法,并使用你的第一个评论中提到的例子@mnel的好答案:

greek <- c("alpha", "beta", "gamma", "delta")
cnames <- paste(LETTERS[1:4], letters[1:4])

legend_expressions <- 
sapply(1:4, function(i) {
    as.expression(substitute(A (B), 
                  list(A = as.name(cnames[i]), B = as.name(greek[i]))))
})

matplot(data)
legend(1,max(data),fill=c("black","red","green","blue"),legend_expressions)

在此输入图像描述

不要使用apply创建表达式向量。

而是使用parse(text = ...)

.expressions <- paste(colnames(data),greek,sep="")
legend_expressions <-parse(text = .expressions)

matplot(data)
legend(1,max(data),fill=c("black","red","green","blue"),legend_expressions)

在此输入图像描述

如果你想在表达式中包含~ 鉴于您当前的工作流程,在paste调用中用sep = '~'替换sep = ''似乎最简单

.expressions <- paste(colnames(data),greek,sep="~")
legend_expressions <-parse(text = .expressions)

matplot(data)
legend(1,max(data),fill=c("black","red","green","blue"),legend_expressions)

在此输入图像描述

甚至可以更清楚地使用sprintf来形成将成为你的表达向量的字符串。

如果要包含包含空格的字符串,则需要将这些字符串包装在字符串中的引号中。 例如。

greek <- c("alpha", "beta", "gamma", "delta")
other_stuff <- c('hello world','again this','and again','hello')

.expressions <- mapply(sprintf, colnames(data), other_stuff, greek, 
                       MoreArgs = list(fmt = '"%s %s"~(%s)'))

.expressions  
##                           A                           B                           C                           D 
## "\"A hello world\"~(alpha)"   "\"B again this\"~(beta)"   "\"C and again\"~(gamma)"       "\"D hello\"~(delta)" 

 legend_expressions <-parse(text = .expressions)

matplot(data)
legend(1,max(data),fill=c("black","red","green","blue"),legend_expressions)

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM