Как мога да оправдая множество части от легенда в 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

Подобно на това на Lyngbakr:

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