varias superponer ordenar modificar los leyenda grafico graficas ggplot etiquetas escala ejes como cambiar barras r ggplot2

superponer - porcentaje en y lab en un diagrama de barras ggplot facetado?



superponer graficas en r ggplot (6)

Aquí hay un método dentro de ggplot , usando ..count.. y ..PANEL.. :

ggplot(test, aes(test2)) + geom_bar(aes(y = (..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..])) + facet_grid(~test1)

Como esto se calcula sobre la marcha, debe ser robusto a los cambios en los parámetros de la gráfica.

haciendo facetas en ggplot A menudo me gustaría usar el porcentaje en lugar de conteos.

p.ej

test1 <- sample(letters[1:2], 100, replace=T) test2 <- sample(letters[3:8], 100, replace=T) test <- data.frame(cbind(test1,test2)) ggplot(test, aes(test2))+geom_bar()+facet_grid(~test1)

Esto es muy fácil, pero si N es diferente en la faceta A en comparación con la faceta B, sería mejor, creo, comparar porcentajes, de modo que cada faceta sume al 100%.

¿Cómo lograrías esto?

Espero que mi pregunta tenga sentido.

Sinceramente.


Aquí hay una solución que debería ayudarte a avanzar en la dirección correcta. Tengo curiosidad por ver si hay formas más eficientes de hacer esto, ya que esto parece un poco hacky y complicado. Podemos usar el argumento construido en ..density.. para la y aesthetic , pero los factores no funcionan allí. Entonces también necesitamos usar scale_x_discrete para etiquetar apropiadamente el eje una vez que convertimos test2 en un objeto numérico.

ggplot(data = test, aes(x = as.numeric(test2)))+ geom_bar(aes(y = ..density..), binwidth = .5)+ scale_x_discrete(limits = sort(unique(test$test2))) + facet_grid(~test1) + xlab("Test 2") + ylab("Density")

Pero dale un giro y dime lo que piensas.

Además, puede acortar la creación de datos de prueba de esa manera, lo que evita los objetos adicionales en su entorno y los tiene que unir:

test <- data.frame( test1 = sample(letters[1:2], 100, replace = TRUE), test2 = sample(letters[3:8], 100, replace = TRUE) )


Gracias por compartir el "consejo" del PANEL en el método ggplot .

Para información: puede generar porcentajes en y lab , en el mismo gráfico de barras, usando count y group en el método ggplot :

ggplot(test, aes(test2,fill=test1)) + geom_bar(aes(y = (..count..)/tapply(..count..,..group..,sum)[..group..]), position="dodge") + scale_y_continuous(labels = percent)


Me ocupo de situaciones similares con bastante frecuencia, pero adopto un enfoque muy diferente que utiliza dos de los otros paquetes de Hadley, concretamente, remodelar y plyr. Principalmente porque prefiero ver las cosas como barras 100% apiladas (cuando suman 100%).

test <- data.frame(sample(letters[1:2], 100, replace=T), sample(letters[3:8], 100, replace=T)) colnames(test) <- c("variable","value") test <- cast(test, variable + value ~ .) colnames(test)[3] <- "frequ" test <- ddply(test,"variable", function(x) { x <- x[order(x$value),] x$cfreq <- cumsum(x$frequ)/sum(x$frequ) x$pos <- (c(0,x$cfreq[-nrow(x)])+x$cfreq)/2 x$freq <- (x$frequ)/sum(x$frequ) x }) plot.tmp <- ggplot(test, aes(variable,frequ, fill=value)) + geom_bar(stat="identity", position="fill") + coord_flip() + scale_y_continuous("", formatter="percent")


Prueba esto:

# first make a dataframe with frequencies df <- as.data.frame(with(test, table(test1,test2))) # or with count() from plyr package as Hadley suggested df <- count(test, vars=c(''test1'', ''test2'')) # next: compute percentages per group df <- ddply(df, .(test1), transform, p = Freq/sum(Freq)) # and plot ggplot(df, aes(test2, p))+geom_bar()+facet_grid(~test1)

También podría agregar + scale_y_continuous(formatter = "percent") al gráfico para ggplot2 versión 0.8.9, o + scale_y_continuous(labels = percent_format()) para la versión 0.9.0.


Una forma muy simple:

ggplot(test, aes(test2)) + geom_bar(aes(y = (..count..)/sum(..count..))) + facet_grid(~test1)

Así que solo cambié el parámetro de geom_bar a aes(y = (..count..)/sum(..count..)) . Después de establecer ylab en NULL y especificar el formateador, puede obtener:

ggplot(test, aes(test2)) + geom_bar(aes(y = (..count..)/sum(..count..))) + facet_grid(~test1) + scale_y_continuous('''', formatter="percent")

Actualización Tenga en cuenta que mientras el formatter = "percent") funciona para ggplot2 versión 0.8.9, en 0.9.0 querrá algo como scale_y_continuous(labels = percent_format()) .