2016-09-04 2 views
0

Я пытаюсь добавить легенду до ggplot из двух гистограмм, которые могут перекрываться, и поэтому хотел бы иметь их немного прозрачна:Добавление легенды мульти-гистограммы ggplot в

library(ggplot2) 
set.seed(1) 
plot.df <- data.frame(x=c(rnorm(1000,30,1),rnorm(10000,40,5)), 
         group=c(rep("a",1000),rep("b",10000))) 

с помощью:

ggplot(plot.df,aes(x=x,fill=factor(group)))+ 
    geom_histogram(data=subset(plot.df,group=='a'),fill="red",alpha=0.5)+ 
    geom_histogram(data=subset(plot.df,group=='b'),fill="darkgray",alpha=0.5)+ 
    scale_colour_manual(name="group",values=c("red","darkgray"),labels=c("a","b"))+scale_fill_manual(name="group",values=c("red","darkgray"),labels=c("a","b")) 

, но все это я получаю:

enter image description here

Что не хватает?

ответ

2

Вместо того, чтобы печатать две своиграммы отдельно, вы можете указать параметр fill в качестве переменной group, и в этом случае легенда будет автоматически сгенерирована.

ggplot(plot.df, aes(x=x, fill = group)) + 
    geom_histogram(alpha = 0.5) + 
    scale_fill_manual(name="group",values=c("red","darkgray"),labels=c("a","b")) 

enter image description here

Заимствованные из here, трюк заключается в настройке параметра fill в отображения (т.е. aes здесь) каждого из histogram участка, а затем вы можете использовать scale_fill_manual обычно:

ggplot(plot.df,aes(x=x))+ 
    geom_histogram(data=subset(plot.df,group=='a'),aes(fill=group),alpha=0.5)+ 
    geom_histogram(data=subset(plot.df,group=='b'),aes(fill=group),alpha=0.5)+ 
    scale_fill_manual(name="group", values=c("red","darkgray"),labels=c("a","b")) 

enter image description here

+0

Спасибо за предложение. Однако этот код ggplot не делает прозрачные гистограммы. Я обновил свой вопрос, чтобы сделать этот пункт более ясным. – user1701545

+0

Обновлен ответ. Вам нужно обернуть параметр 'fill' в' aes', чтобы 'ggplot' распознал и сгенерировал легенду для вас. – Psidom