2012-07-23 15 views
7

Używając ggplot2, chcę utworzyć histogram, w którym wszystko powyżej X jest zgrupowane w koszu końcowym. Na przykład, jeśli większość mojej dystrybucji wynosiła od 100 do 200, a ja chciałem odjąć 10, to chciałbym, aby wszystko powyżej 200 było binowane w "200+".Utwórz kosz na wszystko powyżej wartości X w GGPlot2 Histogram

# create some fake data  
id <- sample(1:100000, 10000, rep=T) 
visits <- sample(1:1200,10000, rep=T) 

#merge to create a dataframe 
df <- data.frame(cbind(id,visits)) 

#plot the data 
hist <- ggplot(df, aes(x=visits)) + geom_histogram(binwidth=50) 

Jak mogę ograniczyć oś X, a jednocześnie reprezentować dane, które chcę ograniczyć?

Odpowiedz

4

Może szukasz w breaks argumentem dla geom_histogram:

# create some fake data  
id <- sample(1:100000, 10000, rep=T) 
visits <- sample(1:1200,10000, rep=T) 

#merge to create a dataframe 
df <- data.frame(cbind(id,visits)) 

#plot the data 
require(ggplot2) 
ggplot(df, aes(x=visits)) + 
    geom_histogram(breaks=c(seq(0, 200, by=10), max(visits)), position = "identity") + 
    coord_cartesian(xlim=c(0,210)) 

to będzie wyglądać następująco (z zastrzeżeniami, że fałszywe dane wygląda całkiem źle tutaj i oś muszą być dostosowane także do pasuje do przerwy):

manual breaks on histogram

Edit:

Może ktoś inny może ważyć tu:

# create breaks and labels 
brks <- c(seq(0, 200, by=10), max(visits)) 
lbls <- c(as.character(seq(0, 190, by=10)), "200+", "") 
# true 
length(brks)==length(lbls) 

# hmmm 
ggplot(df, aes(x=visits)) + 
    geom_histogram(breaks=brks, position = "identity") + 
    coord_cartesian(xlim=c(0,220)) + 
    scale_x_continuous(labels=lbls) 

błędów działka:

Error in scale_labels.continuous(scale) : 
    Breaks and labels are different lengths 

który wygląda jak this ale została ustalona 8 miesięcy temu.

+0

to prawie na miejscu. Jak zaktualizowałbyś etykiety osi X, gdybym chciał dodać coś takiego jak "200+"? – mikebmassey

+0

Myślę, że przez 'scale_x_continuous (labels = ...)', ale nie jestem całkiem pewny –

2

Jeśli chcesz fudge to trochę się poruszać kwestie oznakowania bin potem po prostu podzbiór danych i tworzenia binned wartości w nowym ofiarnego danych ramki:

id <- sample(1:100000, 10000, rep=T) 
visits <- sample(1:1200,10000, rep=T) 

#merge to create a dataframe 
df <- data.frame(cbind(id,visits)) 
#create sacrificical data frame 
dfsac <- df 
dfsac$visits[dfsac$visits > 200 ] <- 200 

następnie użyj komendy breaks w scale_x_continuous zdefiniowanie etykiet bin łatwo:

ggplot(data=dfsac, aes(dfsac$visits)) + 
    geom_histogram(breaks=c(seq(0, 200, by=10)), 
       col="black", 
       fill="red") + 
    labs(x="Visits", y="Count")+ 
    scale_x_continuous(limits=c(0, 200), breaks=c(seq(0, 200, by=10)), labels=c(seq(0,190, by=10), "200+")) 

enter image description here

Powiązane problemy