在R中使用重叠直方图(首选ggplot2)

4

我想使用ggplot2创建一个类似于以下样式的分层直方图: Style plot that I'd like to create

这里是一些数据和代码,我认为它们可以工作:

my.data <- data.frame(treat = rep(c(0, 1), 100), prop_score = runif(2 * 100))
my.data <- transform(my.data, treat = ifelse(treat == 1, "treatment", "control"))
my.data <- transform(my.data, treat = as.factor(treat))
my.fig <- ggplot() + geom_histogram(data = my.data, binwidth = 0.05, alpha = 0.01, aes(x = prop_score, linetype = treat, position = identity)) 

但我的代码产生了这个: enter image description here 谢谢!我更喜欢ggplot2(在学习时,我想我只是要学习常见的、可扩展的绘图语言),但我对任何事情都持开放态度。

由于“treat”是数字,您要么需要将其更改为因子,要么指定group = treat - hadley
@Hadley -- 谢谢!我已经修复了我的因子毛误差,但是我还缺少其他的概念。我尝试了 alpha = 0,但是这也移除了线条。 - Richard Herron
3个回答

8
我相信这就是你要找的内容:
请注意,我将您的处理指标变量更改为TRUE/FALSE而不是0/1,因为它需要成为因子以便ggplot可以按其拆分。 scale_alpha有点像黑客技巧,因为它适用于连续变量,但据我所知没有离散模拟。
library('ggplot2')
my.data <- data.frame(treat = rep(c(FALSE, TRUE), 100), prop_score = runif(2 * 100))
ggplot(my.data) +
  geom_histogram(binwidth = 0.05
                 , aes(  x = prop_score
                       , alpha = treat
                       , linetype = treat)
                 , colour="black"
                 , fill="white"
                 , position="stack") +
  scale_alpha(limits = c(1, 0))

谢谢!我试图使用identity将它们正确地叠加。这可能吗?如果计数相同,则行将重叠,但这对我来说没问题。 - Richard Herron
Richard,是的,你可以使用 position="identity"。我在制作图表时可能只是在脑海中进行了一些更改。 - Kevin L.

2

FWIW,我在以上回答的基础上构建了一个非常接近我提供的原始直方图的版本。

data.3.t <- subset(data.3, treat == 1)
data.3.c <- subset(data.3, treat == 0)

fig.3 <- ggplot()
fig.3 <- fig.3 + geom_histogram(data = data.3.t , binwidth = 0.05, aes(x = prop_score, linetype = treat.factor), fill = NA, colour = "black")
fig.3 <- fig.3 + geom_histogram(data = data.3.c, binwidth = 0.05, aes(x = prop_score, linetype = treat.factor), fill = NA, colour = "black")
fig.3 <- fig.3 + scale_linetype_manual(values = c(1,2))
fig.3 <- fig.3 + labs(x = "propensity score", linetype = "group")
fig.3 <- fig.3 + theme_bw() 

这大致意思是: 这里输入图像描述

1
my.fig <- ggplot(data = my.data) + 
          geom_histogram(binwidth = 0.05,
                         aes(x = prop_score,
                             position = identity,
                             linetype=treat),
                         fill="white", 
                         colour="black",alpha=0)+
          scale_linetype_manual(values=c(1,2))+
          theme_bw()

1
我认为你可能想要使用 fill = NA - hadley
& Hadley - 是的,fill = NA 可以解决问题。但是我仍然想让它们重叠。这将使得相同计数在同一区间图上重叠,但对我来说没关系。这可能吗? - Richard Herron
好的。当alpha=0时设置fill没有意义,因此可以省略。 - Wojciech Sobala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接