Есть несколько вещей, которые были необходимы здесь , но основной из них - получение трех выражений в подходящем формате - просто c
- их совместное использование не работает. Для этого я создаю список выражений, а затем sapply
функцию as.expression
над этим списком, чтобы получить «вектор выражений».
Я использую функцию plotmath atop
, чтобы получить «linebreak»; это ставит свои аргументы, один поверх другого.
Чтобы получить 0,95
часть, которую я полагаю, это просто 0.95
, но в вашей местности, на моей машине я должен был использовать функцию макета *
с буквальным ","
противопоставлять 0
и 95
. Если это просто написать десятичное число, то в других локалях, которые используют .
в качестве разделителя с десятичной запятой, это было бы необязательно. Я подозреваю, что в вашем регионе вы можете использовать вторую версию ниже, но писать [0,99]
вместо [0.99]
, но я не знаю.
Если вы просто положить
bquote(atop(foo_0.99^normal ==, .round(bar, 4)))
вы просто получите ошибку:
> bquote(atop(foo_0.99^normal ==, .round(bar, 4)))
Error: unexpected ',' in "bquote(atop(foo_0.99^normal ==,"
Это происходит потому, что правая сторона ==
функции/оператора отсутствует. Поскольку вы не хотите ничего после ==
(в текущей строке!), Вам нужно использовать что-то, что не добавляет лишнего места, но дает действительную правую сторону для ==
. Здесь я использую phantom()
, который действует как заполнитель, но не оставляет места (поскольку я не даю ему никаких аргументов). Но вы также можете использовать == ""
, заменяя ""
на phantom()
.
Чтобы получить текст в том же цвете, что и строка, используйте аргумент text.col
.
Вот вещь, в полном объеме со всеми вашими запросами удовлетворяются за (после моды):
test <- 10:1
dummy1 <- 0.004323423
dummy2 <- 0.054
dummy3 <- 0.032
plot(test, 1:10)
## list of expressions
exprs <-
list(bquote(atop(Qua_0 * "," * 99^normal == phantom(), .(round(dummy1, 4)))),
bquote(atop(Qua_0 * "," * 95^normal == phantom(), .(round(dummy2, 4)))),
bquote(atop(Qua_0 * "," * 99^t == phantom(), .(round(dummy3, 4)))))
## fudge to get them as an expression vector
exprs <- sapply(exprs, as.expression)
cols <- c("red", "black", "darkgreen")
legend("topright", legend = exprs, bty = "n", lwd = 2, cex = 1, col = cols,
lty=c(1,3,5), text.col = cols)
Похоже, что вы используете LaTeX _
получить верхний индекс. В plotmath вам нужно [ ]
. Вы также заметите, что это не совсем так красиво типографически - между элементами легенды недостаточно места, но некоторое пространство между элементами внутри одной записи. Это связано с тем, что мы злоупотребляем atop
, чтобы подделать новую строку. Мы можем справиться с этим, используя аргумент y.intersp
legend
. Увеличение его до 2
дает достаточное пространство.
Объединяя это, я хотел бы сделать следующее, чтобы удовлетворить все ваши требования:
plot(test, 1:10)
## list of expressions
exprs <-
list(bquote(atop(Qua[0.99]^normal == phantom(), .(round(dummy1, 4)))),
bquote(atop(Qua[0.95]^normal == phantom(), .(round(dummy2, 4)))),
bquote(atop(Qua[0.99]^t == phantom(), .(round(dummy3, 4)))))
## fudge to get them as an expression vector
exprs <- sapply(exprs, as.expression)
cols <- c("red", "black", "darkgreen")
legend("topright", legend = exprs, bty = "n", lwd = 2, cex = 1, col = cols,
lty=c(1,3,5), text.col = cols, y.intersp = 2)
Это дает:
Заканчивать [** этот ответ **] (HTTP://stackoverflow.com/a/15300449/1478381) к одному из моих вопросов от @agstudy. Я думаю, что это может помочь вам –
@ SimonO101 mh нет, я не могу понять это ... –
@ SimonO101 Это работает, потому что решение отображает два выражения на разных строках. Вы не можете сделать это в легенде, так как каждая запись должна быть на одной «строке», и только одно выражение для записи легенды может быть только одним. –