Как я могу обосновать несколько частей легенды в R?

Я хочу выровнять одну часть легенды по левому краю, а остальные — по правому.

Вот код:

plot(1:10, ty="n", axes=F, xlab = NA, ylab = NA)
legend(2,8,legend = c(paste("Muito baixo:", start), paste("Baixo:", middle[1]), paste("Médio:", middle[2]), paste("Alto:", middle[3]), paste("Muito alto:", end)), fill = RdYlGn, bty = "n", cex = 1.4)

Теперь моя легенда выглядит так:

СЕЙЧАС

и я хочу что-то вроде этого:

НОВОЕ


person Murillo    schedule 08.11.2018    source источник
comment
Я не знаю, как это сделать в базовой графике; фактически вы запрашиваете несколько столбцов, поскольку шрифт имеет переменную ширину, и концепция пробелов не расширяется. Я думаю, вам нужно будет пойти по пути двух легенд, подобно stackoverflow.com/q/29692288/3358272   -  person r2evans    schedule 08.11.2018
comment
Мурильо, если один из ответов касается вашего вопроса, примите его; это не только дает небольшое преимущество отвечающему с некоторыми баллами, но также обеспечивает некоторое закрытие для читателей с похожими вопросами. Хотя вы можете принять только один ответ, у вас есть возможность проголосовать за столько, сколько вы считаете полезным. (Если все еще есть проблемы, вам, вероятно, придется отредактировать свой вопрос, указав дополнительные сведения.)   -  person r2evans    schedule 14.11.2018


Ответы (2)


Адаптировано из этого ответа:

plot(1:10, ty="n", axes=F, xlab = NA, ylab = NA)
foo <- legend(2,8,legend = c("Muito baixo:","Baixo:","Médio:","Alto:","Muito alto:"), bty = "n", cex = 1.4)
text(0.5 + foo$rect$left + foo$rect$w, foo$text$y, c("<58", "58-68", "68-74", "74-84", ">84"), cex = 1.4, pos = 2)

0.5 — это буфер, который необходимо настроить.

введите здесь описание изображения

person Lyngbakr    schedule 08.11.2018

Похоже на Люнгбакра:

leg <- round(aggregate(disp ~ cyl, data=mtcars, FUN=range))
leg$disp <- apply(leg$disp, 1, paste, collapse="-")
leg$txt <- c("Four Cylinders", "Six", "Eight")
plot(disp~mpg, col=cyl, data=mtcars, pch=16)
l <- legend("topright", title="Cyl ~ Disp",
            legend = leg$txt, pch = 16, col = leg$cyl,
            text.width = max(strwidth(paste(leg$txt, "   ", leg$disp))),
            xjust = 1, yjust = 1)
text(l$rect$left + l$rect$w, l$text$y - 0.2*strheight("W"),
     leg$disp, pos=2)

пример сюжета от mtcars

Заметки:

  • Использование " " в strwidth должно было обеспечить небольшой буфер, который можно изменить по вкусу;
  • Текст в правом столбце был немного смещен по вертикали от текста фактической легенды, поэтому я добавил буфер. Поскольку это зависит от размера шрифта и единиц измерения по оси Y, я использовал число, кратное strheight, поэкспериментируйте с ним с вашими данными.

Сильное влияние на Как сделать метки в легенде выровнять по правому краю R?

person r2evans    schedule 08.11.2018