2015-12-02 13 views
8

To moje dane:R- histogram Podział według współczynnika poziomie

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

Jeśli chcę wykreślić histogram z diff, mogę to zrobić:

hist(data$diff) 

Ale to, co chcę zrobić, aby podziel mój histogram zgodnie z type. Mogłem to zrobić:

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

Ale co to daje mi są dwa różne histogramy obok siebie. Chcę tylko utworzyć pojedynczy histogram z diff z jednej strony i diff z drugiej strony. Coś w tym stylu z kreskami jako ciągłe bez przerw lub granicy pomiędzy nimi. Prawdopodobnie oznaczałoby to, że oś zostanie podzielona na dwa dla każdego czynnika. enter image description here

Odpowiedz

13

Można użyć pakietu ggplot2:

library(ggplot2) 

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

enter image description here

Można też umieścić je na tej samej działce przez "uniku" je:

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

enter image description here

Jeśli chcesz je nakładać, pozycja musi być 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

Jeśli chcesz, żeby wyglądać jak ma to miejsce w pierwszym, ale bez granicy, trzeba go hack mały:

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

+0

Dziękuję Sam. Mogłem wyprodukować ten spisek. Ale szukałem połączenia tych dwóch. Zasadniczo te same bez granic oddzielających je pomiędzy. – KS89

5

że działka została wykonana przy użyciu pakietu kraty

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

oto jak można to zrobić w grafice bazowych

## 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

Powiązane problemy