将图例添加到多直方图ggplot中

use*_*545 4 r ggplot2

我正在尝试向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)))
Run Code Online (Sandbox Code Playgroud)

使用:

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"))
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

在此处输入图片说明

少了什么东西?

Psi*_*dom 6

您可以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"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这里借来的诀窍在于在每个图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"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明