8

我想合并拉丁文和希腊文文本的向量以生成绘图标题、轴标签、图例条目等。我在下面提供了一个简单的示例。我不知道如何以原生形式呈现希腊字母。我已经尝试了, 和命令的各种组合expression,但是对于单个表达式的情况,我无法对容易生成混合拉丁/希腊文本的代码进行矢量化(例如,适用于单个表达式的情况) .parseapplypasteexpression("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(δ))。提前致谢。

4

2 回答 2

8

这是一种避免 的替代方法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)

在此处输入图像描述

于 2012-11-01T01:10:56.527 回答
4

不要使用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)

在此处输入图像描述

于 2012-11-01T00:37:07.960 回答