Как я могу обосновать несколько частей легенды в R? - PullRequest
0 голосов
/ 08 ноября 2018

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

Вот код:

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)

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

NOW

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

NEW

Ответы [ 2 ]

0 голосов
/ 08 ноября 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)

sample plot from mtcars

Примечания:

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

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

0 голосов
/ 08 ноября 2018

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

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 - это буфер, который необходимо настроить.

enter image description here

...