我一直在尝试通过使用填充美学和具有两个级别的特定列来绘制两个直方图。然而,我的代码并没有同时显示两个所需的直方图,而是显示了一个包含所有数据的直方图,而另一个直方图只显示了第二个分类。我不知道我的语法是否有问题,也不知道这是不是一个棘手的问题。
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)
我得到了什么
任何帮助或想法都将受到高度赞赏!
发布于 2019-05-28 02:22:51
您需要做的就是将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")
发布于 2019-05-28 02:24:31
您的目标是通过颜色组合来显示重叠吗?我不确定如何强制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"))
https://stackoverflow.com/questions/56330434
复制相似问题