Показать два символа для каждого ярлыка легенды - PullRequest
6 голосов
/ 21 февраля 2012

Используя pch Я могу нанести любой символ и назначить любой ярлык в легенде. Но как я могу нарисовать два символа для каждого ярлыка легенды? Например, на приведенном ниже графике я бы хотел, чтобы ■ ▲ ● были в паре с красными версиями, поэтому у меня есть только три метки «a», «b», «c» для обозначения этих шести символов. На данный момент кажется, что базовая легенда сюжета позволяет мне наносить только один символ для каждой метки:

plot(rnorm(50),pch=c(15:17),col=1:2)
legend('topleft',pch=c(15:17),col=1:2,legend=c("a","b","c"),cex=1.5)

enter image description here

Ответы [ 2 ]

8 голосов
/ 21 февраля 2012

Это не так уж сложно с lattice, так как его аргумент key = принимает произвольное количество столбцов, которые будут включены в легенду.

library(lattice)

myPCH <- 15:17
Data  <- rnorm(50)
Index <- seq(length(Data))

xyplot(Data ~ Index, 
       pch = myPCH, col=1:2,
       key = list(space = "right", adj=1,
                  text = list(c("a", "b", "c"), cex=1.5),
                  points = list(pch = myPCH),
                  points = list(pch = myPCH,col=2)))

Я не знаю с самого началамоей головы, как включить легенду в область построения, но с этим видом сюжета, кажется, лучше все-таки иметь ее снаружи.( Edit: @chl в комментариях любезно указывает на несколько способов сделать это. Например, чтобы нарисовать ключ в левом нижнем углу рисунка, замените space = "right" в приведенном выше тексте либо corner = c(0,0) или x = 0, y=0.2)

enter image description here

5 голосов
/ 06 февраля 2013

Как указал chl, также возможно создать индивидуальную легенду.Функция 'legend' невидимо возвращает границы поля легенды, а также координаты текста легенды.Можно нарисовать текст легенды без символов, а затем вручную добавить символы с «точками» к возвращенным координатам.Для этого не потребуются дополнительные графические пакеты:

plot(rnorm(50), pch=c(15:17), col=1:2)
# Plot legend text, inset could be used to shift legend text to the right
pos <- legend('topleft', legend=c("a","b","c"), cex=1.5)
# Plot symbols in two columns, shifted to the left by 3 and 1 respectively
points(x=rep(pos$text$x, times=2) - c(3,1), 
    y=rep(pos$text$y, times=2), 
    pch=rep(c(15:17), times=2), col=rep(1:2, times=3))

The image produced by the code

...