несколько элементов bquote в легенде графика R

Следующие работы (скопируйте и вставьте в R)

a=123
plot(1,1)
legend('bottomleft',legend=bquote(theta == .(a)))

Я хочу иметь несколько элементов в легенде. Все греческими буквами. В качестве простого примера, если я повторяю элемент дважды, код больше не работает.

a=123
plot(1,1)
legend('bottomleft',legend=c(bquote(theta == .(a)),bquote(theta == .(a))))

Я пробовал много более сложных выражений, но все они не работали.

Любая помощь будет оценена.


person Sang    schedule 26.08.2011    source источник


Ответы (2)


В этом случае plotmath не может привести к списку вызовов выражений.

> cs <- c(bquote(theta == .(a)),bquote(theta == .(a)))
> cs
[[1]]
theta == 123

[[2]]
theta == 123

> sapply(cs, class)
[1] "call" "call"

Вы можете выполнить эту работу, если сами принудите к выражениям:

> c(as.expression(bquote(theta == .(a))), as.expression(bquote(theta == .(a))))
expression(theta == 123, theta == 123)
> plot(1,1)
> legend('bottomleft',legend= c(as.expression(bquote(theta == .(a))), 
+                               as.expression(bquote(theta == .(a)))))

Другой способ — привести исходный список вызовов к выражениям с помощью sapply:

plot(1,1)
legend("bottomleft", 
       sapply(c(bquote(theta == .(a)), bquote(theta == .(a))), as.expression))
person Gavin Simpson    schedule 26.08.2011
comment
@Gavin: кажется, я помню долгий обмен мнениями на Rhelp несколько лет назад, когда Томас Ламли наконец придумал решение sapply (..., as.expression). Я безуспешно пытался найти его в других случаях, но теперь я знаю, где найти другую копию :-) - person IRTFM; 27.08.2011

Чтобы привести исходный список вызовов к выражениям, нет необходимости использовать sapply(). Достаточно использовать as.expression() только для одного из компонентов конструкции c():

plot(1,1)
legend("bottomleft", 
       c(as.expression(bquote(theta == .(a))), bquote(theta == .(a))))

Затем c() автоматически принудит весь list к классу expression.

person vladbazon    schedule 04.10.2016