我想合并拉丁文和希腊文的向量生成情节标题,轴标签,图例项,等我在下面提供了一个简单的例子。 我无法弄清楚如何使天然状态的希腊字母。 我已经尝试的各种组合expression
, parse
,并apply
于paste
命令,但我还没有能够进行向量化的是容易产生用于单个表达的情况下混合的拉丁/希腊文(例如,代码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))
能否请你帮我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)
如果你想包括~
表达式中。 鉴于你当前的工作流程,它似乎最容易更换sep = ''
与sep = '~'
调用内paste
.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)
文章来源: R: creating vectors of latin/greek expression for plot titles, axis labels, or legends