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

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

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

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

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

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

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

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

1 ответ

просто укажите 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"))

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

licensed under cc by-sa 3.0 with attribution.