2013-08-23 1 views
0

Я хочу сделать участок разброса с соединительными линиями для разных групп и разных лиц. Я делаю панели, обусловленные моей групповой переменной и группами, обусловленными моими индивидуальными переменными. Теперь я хотел бы добавить легенду внутри каждой панели (см. Код ниже). На участках я хотел бы иметь легенды о лицах для GRP == 1 в первой панели, GRP == 2 во второй панели и так далее. Все легенды расположены в верхнем левом углу панели, к которой они принадлежат. Как мне закодировать?Добавить легенду внутри каждой панели с решеткой в ​​R

library(lattice) 
mydata <- data.frame(ID = rep(1: 20, each = 10), 
         GRP = rep(1: 4, each = 50), 
         x = rep(0: 9, 20)) 
mydata$y <- 1.2 * mydata$GRP * mydata$x + 
      rnorm(nrow(mydata), sd = mydata$GRP) 

xyplot(y~ x | factor(GRP), data = mydata, 
    groups = ID, 
    type = "b", 
    as.table = T, 
    layout = c(2, 2), 
    panel = panel.superpose, 
    panel.groups = function (x, y, ...) { 
     panel.xyplot(x, y, ...) 
    } 
) 
+0

Теперь, когда я понимаю, чего вы пытаетесь достичь, я думаю, что вы принимаете неправильный подход. Идея с графикой решетки состоит в том, чтобы показать те же параметры (например, мужчины и женщины) по разным группам (например, контроль против лечения). Здесь вы просто пытаетесь сделать несколько графиков с разными данными. Вместо этого посмотрите на использование функции 'layout' или' par: mfrow' для объединения нескольких графиков. – dayne

ответ

1

Попробуйте что-нибудь подобное. Обратите внимание, что команда подмножества входит в инструкцию данных в xyplot. Это специально. Если вы вызываете подмножество как аргумент xyplot, тогда графики будут показывать все 20 меток на каждом графике.

library(lattice) 
mydata <- data.frame(ID = rep(1:20, each = 10), GRP = rep(1:4, each = 50), x = rep(0:9, 20)) 
mydata$y <- 1.2 * mydata$GRP * mydata$x + rnorm(nrow(mydata), sd = mydata$GRP) 

i=1; j=1 
for(grp in 1:4) { 
     a <- xyplot(y~x|factor(GRP), data=subset(mydata, GRP==grp), 
        groups = factor(ID), 
        type = "b", 
        auto.key=list(columns=4,space="inside") 
       ) 
    print(a, split=c(i,j,2,2), more=T) 
    i=i+1; if(i>2){i=1;j=j+1} # basically, tell the plots which quadrant to go in 
} 
Смежные вопросы