web-dev-qa-db-fra.com

R- histogramme divisé en fonction du niveau de facteur

Ce sont mes données:

type<-rep(c(0,1),100) 
diff<-rnorm(100)
data<-data.frame(type,diff)

Si je veux tracer l'historgramme de diff, je fais ceci:

hist(data$diff)

Mais ce que je veux faire pour diviser mon histogramme en fonction de type. Je pourrais faire ça:

par(mfrow=c(1,2))
hist(data$diff[data$type==0])
hist(data$diff[data$type==1])

Mais ce que cela me donne, ce sont deux histogrammes différents côte à côte. Ce que je veux faire, c'est produire un seul histogramme avec diff de 0 d'un côté et diffde 1 de l'autre côté. Quelque chose comme ça avec des barres aussi continues sans les ruptures ou la bordure entre les deux. Cela signifierait probablement que l'axe sera divisé en deux pour chaque facteur. enter image description here

15
89_Simple

Vous pouvez utiliser le ggplot2 paquet:

library(ggplot2)

ggplot(data,aes(x=diff))+geom_histogram()+facet_grid(~type)+theme_bw()

enter image description here

Vous pouvez également les mettre sur le même terrain en les "esquivant":

ggplot(data,aes(x=diff,group=type,fill=type))+
  geom_histogram(position="dodge",binwidth=0.25)+theme_bw()

enter image description here

Si vous souhaitez qu'ils se chevauchent, la position doit être position="identity"

ggplot(data,aes(x=diff,group=type,fill=type))+
  geom_histogram(position="identity",alpha=0.5,binwidth=0.25)+theme_bw()

enter image description here

Si vous voulez qu'ils ressemblent à cela dans le premier mais sans la bordure, vous devez le pirater un peu:

data$diff[data$type==1] <- data$diff[data$type==1] + 6

ggplot(data,aes(x=diff,group=type,fill=type))+
  geom_histogram(position="identity",alpha=0.5,binwidth=0.25)+theme_bw()+
  scale_x_continuous(breaks=c(-2:2,4:8),labels=c(-2:2,-2:2))

enter image description here

25
Sam Dickson

Ce tracé a été réalisé à l'aide du package de treillis

set.seed(1)
type<-rep(c(0,1),100) 
diff<-rnorm(100)
data<-data.frame(type,diff)


library('lattice')
histogram(~ diff | type, data = data)

enter image description here

voici comment vous pouvez le faire dans les graphiques de base

## first plot - left half of x-axis, right margin set to 0 lines
par(fig = c(0, .5, 0, 1), mar = c(5,4,3,0))
hist(data$diff[data$type==0], ann = FALSE, las = 1)

## second plot - right half of x-axis, left margin set to 0 lines
par(fig = c(.5, 1, 0, 1), mar = c(5,0,3,2), new = TRUE)
hist(data$diff[data$type==1], ann = FALSE, axes = FALSE)
axis(1)
axis(2, lwd.ticks = 0, labels = FALSE)

title(main = 'Histogram', xlab = 'x label', outer = TRUE, line = -2)

enter image description here

11
rawr