Отрегулируйте тип линии One Line в facet_grid

У меня есть сюжет, похожий на этот:

b <- data.frame(x=c(1,2,3,1,2,3,1,2,3,1,2,3),y=c(1,2,3,1.5,1.9,2.5,3,2,1,2.9,1.8,1.5),c=c("1","1","1","2","2","2","1","1","1","2","2","2"),f=c("b","b","b","b","b","b","a","a","a","a","a","a"))
ggplot(b,aes(x=x,y=y,color=c,group=c))+geom_line()+facet_grid(f ~ .)

Теперь я хочу, чтобы только линия «1» в верхней грани «а» была толще и пунктирной. Это возможно?


person fabb    schedule 03.06.2012    source источник


Ответы (1)


Одна из первых и наиболее важных вещей, которые вы узнаете о ggplot2, заключается в том, что когда вы хотите, чтобы что-то появилось на вашем графике, вы обычно создаете переменную во фрейме данных, которая представляет визуальную информацию, которую вы хотите отобразить.

В вашем случае вам нужна переменная, которая выбирает только те наблюдения из панели a, строка 1:

b$grp <- with(b,(f == "a") & (c == 1))

Затем вы можете сопоставить обе size и linetype с этой переменной и настроить масштабы вручную:

library(scales)
ggplot(b,aes(x=x,y=y)) + 
    geom_line(aes(color=c,group=c,size = grp,linetype = grp)) + 
    facet_grid(f ~ .) + 
    scale_size_manual(values = c(0.5,1.2),guide = "none") + 
    scale_linetype_manual(values = c('solid','dashed'),guide = "none")
person joran    schedule 03.06.2012
comment
Спасибо за подсказку с расширением data.frame. Я хотел попробовать без него, так как во многих случаях в этом нет необходимости (stackoverflow.com/a/8408068/354018), но, может быть, на этот раз это действительно так. - person fabb; 03.06.2012
comment
Я думаю, вам нужно не library(scales), а library(ggplot2). - person fabb; 03.06.2012