【问题标题】:Multiple greek letters in one legend line一个图例行中有多个希腊字母
【发布时间】:2017-09-04 19:08:34
【问题描述】:

我有以下一段 R 代码:

y1=rnorm(10,0,1)
y2=rnorm(10,0,1)
y3=rnorm(10,0,1)
x=seq(1,10,1)
mat=cbind(y1,y2,y3)
a=c(1,4,7)
b=c(2,5,8)
g=c(3,6,9)
v=as.factor(paste(expression(alpha)," = ",a,", ",
                  expression(beta)," = ",b,", ",
                  expression(gamma)," = ",g))
matplot(x,mat,type="l",col=1:3,lty=1,xlab="x",ylab="mat",main="Legend Practice")
legend("bottomright",col=1:3,lty=1,legend=levels(v))

在图例行中,结果显示为“alpha = 1,beta = 2, gamma = 3”,依此类推,对应于 3 个y 值的 3 行中的每一行。如何将其更改为 α = 1, β = 2, γ = 3 等等?

有什么想法吗?

【问题讨论】:

    标签: r label legend


    【解决方案1】:

    我们可以为此使用bquote

    matplot(x,mat,type="l",col=1:3,lty=1,xlab="x",ylab="mat",main="Legend Practice")
    legend("bottomright",col=1:3,lty=1, legend=as.expression(c(
            bquote(alpha~'='~.(a[1])~', '~beta~'='~.(b[1])~', '~gamma~'='~.(g[1])),
            bquote(alpha~'='~.(a[2])~', '~beta~'='~.(b[2])~', '~gamma~'='~.(g[2])),
            bquote(alpha~'='~.(a[3])~', '~beta~'='~.(b[3])~', '~gamma~'='~.(g[3])) )))
    

    这可以通过循环遍历@d.b 提到的向量序列来变得紧凑

    legend("bottomright",col=1:3,lty=1, legend = as.expression(sapply(1:length(a),
      function(i) bquote(alpha~'='~.(a[i])~', '~beta~'='~.(b[i])~', '~gamma~'='~.(g[i])))))
    

    或者mapply

    legend("bottomright",col=1:3,lty=1, legend = as.expression(mapply(function(x,y, z) 
           bquote(alpha~'='~.(x)~', '~beta~'='~.(y)~', '~gamma~'='~.(z)),
                   a, b, g)))
    

    【讨论】:

    • 我认为legend("bottomright",col=1:3,lty=1, legend = as.expression(sapply(1:length(a), function(i) bquote(alpha~'='~.(a[i])~', '~beta~'='~.(b[i])~', '~gamma~'='~.(g[i]))))) 可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2021-07-02
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多