Легенды в R сюжетах - PullRequest
       17

Легенды в R сюжетах

9 голосов
/ 02 марта 2012

Я хочу разделить легенду на графике на 2, чтобы первые 3 элемента были отделены от 4-го элемента зазором в 1 высоту строки. Сначала я просто попытался добавить разрыв строки перед первым элементом:

legend("topright",col=1,lty=1:3,lwd=1,legend=c("leg1","leg2","\nleg3"), bty="n")

но это, кажется, увеличивает разрыв между всеми элементами (это документированное поведение?)

Затем я использовал 2 отдельные легенды, установив границы на "n" и используя lines() для восстановления границ (кстати, есть ли способ подавить только 1 границу легенды?); хотя это работает, оно требует много проб и ошибок со значениями inset.

Значения по умолчанию inset в legend() равны c(0,0), но они, очевидно, корректируются при первоначальном вызове legend() в зависимости от длины текста в элементах этой легенды. Согласно ?legend, значение legend() вызова включает в себя

"числовые векторы длины длины (легенда), дающие координаты x и y текста легенды."

Есть ли в любом случае это можно преобразовать в подходящие значения для inset 2-го вызова, так что элементы обеих легенд выстраиваются?

1 Ответ

22 голосов
/ 02 марта 2012

просто укажите NA в аргументах, где вы хотите, чтобы место было.Вам нужно будет указать все аргументы легенды как векторы.

    set.seed(2)
    plot(0:10, rnorm(11), col = sample(c("green", "blue"), 11, replace = TRUE), 
        pch = sample(c(3, 19), 11, replace = TRUE), xlim = c(0, 12))
    legend("topright", pch = c(3, 19, NA, 3, 19), 
        col = c("green", "green", NA, "blue", "blue"), 
        legend = c("green cross", "green dot", NA, "blue cross", "blue dot"))

enter image description here

В качестве альтернативы, если вы хотите сделать 2 вызова legend() для более точного управления, укажите trace=TRUE в аргументах и ​​возвращает нужные вам координаты x и y.

...