Имея подразделы в легенде сюжета в R?
Я создаю следующую легенду:
legend(
"bottomleft"
, legend=c(
expression(bold("Long:" ~ (w==10^2 ~ ";" ~ h==10^5)))
, expression(q[c] == 0.00 ~ ";" ~ beta == 0)
, expression(q[c] == 0.05 ~ ";" ~ beta == 2)
, expression(q[c] == 0.10 ~ ";" ~ beta == 10)
, expression(q[c] == 0.20 ~ ";" ~ beta == 10)
, expression(q[c] == 0.40 ~ ";" ~ beta == 10)
, expression(bold("Wide:" ~ (w==10^3 ~ ";" ~ h==10^3)))
, expression(q[c] == 0.00 ~ ";" ~ beta == 0)
, expression(q[c] == 0.05 ~ ";" ~ beta == 2)
, expression(q[c] == 0.10 ~ ";" ~ beta == 10)
, expression(q[c] == 0.20 ~ ";" ~ beta == 10)
, expression(q[c] == 0.40 ~ ";" ~ beta == 10)
)
, col=c("n", 1, 2, 3, 4, 5, -1, 1, 2, 3, 4, 5)
, lty=c(F, 1, 1, 1, 1, 1, -1, 2, 2, 2, 2, 2)
, cex=.65
)
Что дает мне:
Было бы лучше иметь заголовок, который также охватывает область выборки "линия+точка":
Как я могу это осознать? (Я попытался, например, установить n
или FALSE
в lty-секции, но это не сработало,...).
Мне также не удалось выровнять значения qc
и beta
, но это уже другая история...
2 ответа:
Аналогичный подход, но с использованием заголовка
legend
и созданием двух легенд (без полей) перед добавлением прямоугольника (поля) послеplot(1) # legend 1 l1 <- legend( "topleft" , legend=c(expression(q[c] == 0.00 ~ ";" ~ beta == 0) , expression(q[c] == 0.05 ~ ";" ~ beta == 2) , expression(q[c] == 0.10 ~ ";" ~ beta == 10) , expression(q[c] == 0.20 ~ ";" ~ beta == 10) , expression(q[c] == 0.40 ~ ";" ~ beta == 10)), title = expression(bold("Long:" ~ (w==10^2 ~ ";" ~ h==10^5))), , col=c( 1, 2, 3, 4, 5) , lty=c(1, 1, 1, 1, 1) , cex=.65, bty='n') # legend 2, placed directly below legend 1 l2 <- legend(x = l1$rect$left, y = with(l1$rect, top - h), legend =c(expression(q[c] == 0.00 ~ ";" ~ beta == 0) , expression(q[c] == 0.05 ~ ";" ~ beta == 2) , expression(q[c] == 0.10 ~ ";" ~ beta == 10) , expression(q[c] == 0.20 ~ ";" ~ beta == 10) , expression(q[c] == 0.40 ~ ";" ~ beta == 10)), title = expression(bold("Wide:" ~ (w==10^3 ~ ";" ~ h==10^3))), col=c( 1, 2, 3, 4, 5) , lty=c( 2, 2, 2, 2, 2) , cex=.65, bty='n') # add the rectangle around the legend rect(xleft = l1$rect$left, ybottom = with(l2$rect, top - h), xright = l1$rect$left + max(l1$rect$w, l1$rect$w), ytop = l1$rect$top)
Используя предложенный метод решения
@DWin
:Установите примерный график:
plot(1:10,type="n")
Сохраните легенду и
phantom
скройте заголовки, которые будут написаны вручнуюЗатем возьмите значения по оси y двух битовsaveleg <- legend( "bottomleft" , legend=c( expression(phantom(bold("Long:" ~ (w==10^2 ~ ";" ~ h==10^5)))) , expression(q[c] == 0.00 ~ ";" ~ beta == 0) , expression(q[c] == 0.05 ~ ";" ~ beta == 2) , expression(q[c] == 0.10 ~ ";" ~ beta == 10) , expression(q[c] == 0.20 ~ ";" ~ beta == 10) , expression(q[c] == 0.40 ~ ";" ~ beta == 10) , expression(phantom(bold("Wide:" ~ (w==10^3 ~ ";" ~ h==10^3)))) , expression(q[c] == 0.00 ~ ";" ~ beta == 0) , expression(q[c] == 0.05 ~ ";" ~ beta == 2) , expression(q[c] == 0.10 ~ ";" ~ beta == 10) , expression(q[c] == 0.20 ~ ";" ~ beta == 10) , expression(q[c] == 0.40 ~ ";" ~ beta == 10) ) , col=c("n", 1, 2, 3, 4, 5, -1, 1, 2, 3, 4, 5) , lty=c(F, 1, 1, 1, 1, 1, -1, 2, 2, 2, 2, 2) , cex=.65 , trace=TRUE )
text
, которые будут реплицированы из сохраненной легенды с новыми заданными значениями по оси X.text( c(0.6,0.6), saveleg$text$y[c(1,7)], c( expression(bold("Long:" ~ (w==10^2 ~ ";" ~ h==10^5))), expression(bold("Wide:" ~ (w==10^3 ~ ";" ~ h==10^3))) ), cex=0.65, pos=4 )
Результат: