尝试使用填充美学绘制两个直方图时出现问题

时间:2019-05-27 17:44:31

标签: r ggplot2

我一直在尝试通过使用填充美学和带有两个级别的特定列来绘制两个直方图。但是,我的代码没有显示两个所需的直方图,而是显示了一个带有整个数据的直方图,而只显示了第二个分类的另一个直方图。我不知道我的语法是否有问题,这也不是什么棘手的问题。

    library(tidyverse)

    db1 <- data.frame(type=rep("A",100),val=rnorm(n=100,mean=50,sd=10))
    db2 <- data.frame(type=rep("B",150),val=rnorm(n=150,mean=50,sd=10))
    dbf <- bind_rows(db1,db2)

    P1 <- ggplot(db1, aes(x=val)) + geom_histogram()
    P2 <- ggplot(db2, aes(x=val)) + geom_histogram()
    PF <- ggplot(dbf, aes(x=val)) + geom_histogram()

我想得到这个,P1和P2

ggplot(db1, aes(x=val)) + geom_histogram(fill="red", alpha=0.5) + geom_histogram(data=db2, aes(x=val),fill="green", alpha=0.5)

我想要的

enter image description here

但是我认为代码应该起作用,P1和P2具有列val的填充美感

ggplot(dbf, aes(x=val)) + geom_histogram(aes(fill=type), alpha=0.5)

我的代码

enter image description here

产生PF和P2的组合

ggplot(dbf, aes(x=val)) + geom_histogram(fill="red", alpha=0.5) + geom_histogram(data=db2, aes(x=val),fill="green", alpha=0.5)

我得到的

enter image description here

任何帮助或想法将不胜感激!

2 个答案:

答案 0 :(得分:1)

您需要做的就是将position =“ identity”传递给geom_histogram函数。

library(tidyverse)
library(ggplot2)

db1 <- data.frame(type=rep("A",100),val=rnorm(n=100,mean=50,sd=10))
db2 <- data.frame(type=rep("B",150),val=rnorm(n=150,mean=50,sd=10))
dbf <- bind_rows(db1,db2)

ggplot(dbf, aes(x=val, fill = type)) + geom_histogram(alpha=0.5, position = "identity")

overlapping histogram

答案 1 :(得分:0)

您的目标是通过颜色组合显示重叠吗?我不确定如何强制geom_histogram显示重叠,但是geom_density确实可以满足您的要求。您可以使用带宽(bw)来显示更多或更少的细节。

dbf %>% ggplot() +
  aes(x = val, fill = type) +
  geom_density(alpha = .5, bw = .5) +
  scale_fill_manual(values = c("red","green"))