facet_wrap facet_grid color r ggplot2

color - Cómo especificar columnas en facet_grid O cómo cambiar las etiquetas en facet_wrap



r facet_wrap (2)

Tengo una gran cantidad de series de datos que quiero trazar usando pequeños múltiplos. Una combinación de ggplot2 y facet_wrap hace lo que quiero, generalmente resulta un buen bloque pequeño de facetas de 6 x 6. Aquí hay una versión más simple:

El problema es que no tengo el control adecuado sobre las etiquetas en las facetas. Los nombres de las columnas en el marco de datos son cortos y quiero que sigan así, pero quiero que las etiquetas en las facetas sean más descriptivas. Puedo usar facet_grid para poder aprovechar la función de labeller , pero parece que no hay una forma directa de especificar el número de columnas y una larga fila de facetas simplemente no funciona para esta tarea en particular. ¿Me estoy perdiendo algo obvio?

P. ¿Cómo puedo cambiar las etiquetas de facetas cuando uso facet_wrap sin cambiar los nombres de las columnas? Alternativamente, ¿cómo puedo especificar el número de columnas y filas cuando uso facet_grid?

El código para un ejemplo simplificado sigue. En la vida real, me ocupo de múltiples grupos que contienen docenas de series de datos, cada una de las cuales cambia con frecuencia, por lo que cualquier solución debería ser automática en lugar de depender de la asignación manual de valores.

require(ggplot2) require(reshape) # Random data with short column names set.seed(123) myrows <- 30 mydf <- data.frame(date = seq(as.Date(''2012-01-01''), by = "day", length.out = myrows), aa = runif(myrows, min=1, max=2), bb = runif(myrows, min=1, max=2), cc = runif(myrows, min=1, max=2), dd = runif(myrows, min=1, max=2), ee = runif(myrows, min=1, max=2), ff = runif(myrows, min=1, max=2)) # Plot using facet wrap - we want to specify the columns # and the rows and this works just fine, we have a little block # of 2 columns and 3 rows mydf <- melt(mydf, id = c(''date'')) p1 <- ggplot(mydf, aes(y = value, x = date, group = variable)) + geom_line() + facet_wrap( ~ variable, ncol = 2) print (p1) # Problem: we want more descriptive labels without changing column names. # We can change the labels, but doing so requires us to # switch from facet_wrap to facet_grid # However, in facet_grid we can''t specify the columns and rows... mf_labeller <- function(var, value){ # lifted bodily from the R Cookbook value <- as.character(value) if (var=="variable") { value[value=="aa"] <- "A long label" value[value=="bb"] <- "B Partners" value[value=="cc"] <- "CC Inc." value[value=="dd"] <- "DD Company" value[value=="ee"] <- "Eeeeeek!" value[value=="ff"] <- "Final" } return(value) } p2 <- ggplot(mydf, aes(y = value, x = date, group = variable)) + geom_line() + facet_grid( ~ variable, labeller = mf_labeller) print (p2)


No lo entiendo del todo. Ya ha escrito una función que convierte sus etiquetas cortas en etiquetas largas y descriptivas. ¿Qué tiene de malo simplemente agregar una nueva columna y usar facet_wrap en esa columna?

mydf <- melt(mydf, id = c(''date'')) mydf$variableLab <- mf_labeller(''variable'',mydf$variable) p1 <- ggplot(mydf, aes(y = value, x = date, group = variable)) + geom_line() + facet_wrap( ~ variableLab, ncol = 2) print (p1)


Para cambiar los nombres de las etiquetas, simplemente cambie los niveles de factor del factor que usa en facet_wrap . Estos se usarán en facet_wrap en las tiras. Puede usar una configuración similar a la que usaría con la función de facet_grid en facet_grid . Solo haz algo como:

new_labels = sapply(levels(df$factor_variable), custom_labeller_function) df$factor_variable = factor(df$factor_variable, levels = new_labels)

Ahora puedes usar factor_variable en facet_wrap .