一个图中的两个直方图(ggplot)

时间:2017-05-22 14:23:45

标签: r ggplot2 colors histogram

好吧,我一直在寻找这个网站,在一个地块上制作两个直方图。 我到了

ggplot()+geom_histogram(data=etapa1, aes(x=AverageTemperature),col="red")+
geom_histogram(data=etapa2, aes(x=AverageTemperature),col="blue")

我有两个不同颜色的直方图,但我没有得到一个图例或一个标签,显示每种颜色。我该如何制作呢?

2 个答案:

答案 0 :(得分:3)

正如 Spacedman 所说,如果能更详细地指出问题并提供示例数据集会更好。

所以我创建了一个模拟温度的随机样本集。

etapa1 <- data.frame(AverageTemperature = rnorm(100000, 16.9, 2))
etapa2 <- data.frame(AverageTemperature = rnorm(100000, 17.4, 2))

#Now, combine your two dataframes into one.  First make a new column in each.
etapa1$e <- 'etapa1'
etapa2$e <- 'etapa2'

# combine the two data frames etapa1 and etapa2
combo <- rbind(etapa1, etapa2)

ggplot(combo, aes(AverageTemperature, fill = e)) + geom_density(alpha = 0.2)

对我而言,使用密度图而不是直方图似乎更为明显,因为温度是实数。

希望这有所帮助...

如果您不想将两个data.frames结合起来,那就有点棘手...... 您必须使用scale_colour_manualscale_fill_manual。然后为fill语句定义变量。这可以在标签部分链接

ggplot() + 
  geom_density(data = etapa1, aes(x = AverageTemperature, fill = "r"), alpha = 0.3) +
  geom_density(data = etapa2, aes(x = AverageTemperature, fill = "b"), alpha = 0.3) +
  scale_colour_manual(name ="etapa", values = c("r" = "red", "b" = "blue"), labels=c("b" = "blue values", "r" = "red values")) +
  scale_fill_manual(name ="etapa", values = c("r" = "red", "b" = "blue"), labels=c("b" = "blue values", "r" = "red values"))

您可以分别将geom_density()替换为geom_histogram()

答案 1 :(得分:2)

使用@ TimoWagner的例子:

set.seed(1001)
etapa1 <- data.frame(AverageTemperature = rnorm(100000, 16.9, 2))
etapa2 <- data.frame(AverageTemperature = rnorm(100000, 17.4, 2))

以下是将两个数据集打包在一起的另一种方法:

combdat <- dplyr::bind_rows(list(dat1=etapa1,dat2=etapa2),
                           .id="dataset")

两个叠加的直方图:

library(ggplot2)
ggplot(combdat,aes(AverageTemperature,fill=dataset))+
   scale_fill_manual(values=c("red","blue"))+
   geom_histogram(alpha=0.5,binwidth=0.1,position="identity")