2012-07-23 12 views
7

Utilizando ggplot2, deseo crear un histograma donde todo lo que esté encima de X se agrupe en el contenedor final. Por ejemplo, si la mayor parte de mi distribución estuviera entre 100 y 200, y deseara el bin por 10, me gustaría que todo lo que esté por encima de 200 se agrupe en "200+".Crear un contenedor para cualquier valor superior a X en GGPlot2 Histograma

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

¿Cómo puedo limitar el eje X, mientras sigo representando los datos Quiero límite?

Respuesta

4

Tal vez usted está buscando el argumento para breaksgeom_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)) 

Este sería el siguiente (con las salvedades de que los datos falsos se ve bastante mal aquí y el eje que haya que ajustar también para coincidir con los descansos):

manual breaks on histogram

Editar:

Tal vez alguien más puede pesar en aquí:

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

Los errores de la trama con:

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

que se parece a this sino que se fijó hace 8 meses.

+0

Eso es sólo sobre el clavo. ¿Cómo actualizarías las etiquetas del eje x si quisiera agregar algo como "200+"? – mikebmassey

+0

Creo que a través de 'scale_x_continuous (labels = ...)' pero no estoy seguro –

2

Si desea eludir un poco para conseguir alrededor de los temas de etiquetado de bandejas a continuación, sólo un subconjunto de sus datos y crear los valores agrupados en una nueva trama de datos de sacrificio:

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 

A continuación, utilice el comando breaks en scale_x_continuous para definir las etiquetas de basura fácilmente:

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

Cuestiones relacionadas