我一直在尝试通过使用填充美学和带有两个级别的特定列来绘制两个直方图。但是,我的代码没有显示两个所需的直方图,而是显示了一个带有整个数据的直方图,而只显示了第二个分类的另一个直方图。我不知道我的语法是否有问题,这也不是什么棘手的问题。
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)
我想要的
但是我认为代码应该起作用,P1和P2具有列val的填充美感
ggplot(dbf, aes(x=val)) + geom_histogram(aes(fill=type), alpha=0.5)
我的代码
产生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)
我得到的
任何帮助或想法将不胜感激!
答案 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")
答案 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"))