Наложенные гистограммы в R (предпочтительно ggplot2) - PullRequest
4 голосов
/ 16 марта 2011

Я пытаюсь создать многоуровневую гистограмму, например, с помощью 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 (пока я учился, я подумал, что просто изучаю общий расширяемый язык черчения), но я открыт для всего / для всего.

Ответы [ 3 ]

8 голосов
/ 16 марта 2011

Я считаю, что это то, что вы ищете:

Overlaid histograms

Обратите внимание, что я изменил вашу переменную индикатора лечения на 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))
2 голосов
/ 23 марта 2011

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() 

Что дает что-то вроде этого: enter image description here

1 голос
/ 16 марта 2011
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()
...