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

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

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

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

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

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

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

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

1 ответов


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

    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, которые вам нужны.