varios varias una superponer los graficos graficas grafica ggplot etiquetas escala ejes como cambiar avanzados r facets ggplot2

una - varias graficas en r ggplot



Formateador de etiquetas de eje variable por faceta en ggplot/R (1)

Tengo un marco de datos que captura varias medidas en el tiempo que me gustaría visualizar una faceta de 3x1. Sin embargo, cada medida contiene diferentes unidades / escalas que se beneficiarían de transformaciones personalizadas y esquemas de etiquetado.

Entonces, mi pregunta es: si las unidades y escalas son diferentes en diferentes facetas, ¿cómo puedo especificar un formateador o transformación personalizada (es decir, log10) a un eje particular dentro de una faceta?

Por ejemplo, digamos que tengo los datos:

df = data.frame(dollars=10^rlnorm(50,0,1), counts=rpois(50, 100)) melted.df = melt(df, measure.var=c("dollars", "counts"))

¿Cómo se podría seguir configurando una faceta 2x1 que muestre dólares y cuente sobre el índice con labels=dollars y scale_y_continuous(trans = "log10", ...) para los datos de df$dollars ?

¡Gracias!


Como descubriste, no hay una solución fácil para esto, pero surge mucho. Dado que este tipo de cosas se hacen con tanta frecuencia, me resulta útil explicar por qué esto es difícil y sugerir una posible solución.

Mi experiencia ha sido que las personas que vienen a ggplot2 o los gráficos de celosía fundamentalmente malinterpretan el propósito de facetar (o enrejado, en celosía ). Esta característica se desarrolló con una idea muy específica en mente: la visualización de datos en múltiples grupos que comparten una escala común . Viene de algo llamado principio de pequeños múltiplos, propugnado por Tufte y otros.

Colocar los paneles uno al lado del otro con escalas muy diferentes es algo que los expertos en diseño visual tenderán a evitar, porque puede ser, en el mejor de los casos, engañoso. (No te estoy regañando aquí, solo explicando el razonamiento ...)

Pero, por supuesto, una vez que tiene esta gran herramienta a la vista, nunca se sabe cómo van a usarla las personas. Por lo tanto, se alarga: las solicitudes entran en la capacidad de permitir que las escalas varíen según el panel, y establecer varios aspectos de la gráfica por separado para cada panel. Y así, la faceta en ggplot2 se ha expandido mucho más allá de su intención original.

Una consecuencia de esto es que algunas cosas son difíciles de implementar simplemente debido a la intención de diseño original de la función. Esta es probablemente una de esas instancias.

Ok, suficiente explicación. Aquí está mi solución.

El truco aquí es reconocer que no estás trazando gráficos que comparten una escala . Para mí, eso significa que ni siquiera deberías pensar en usar facetas. En cambio, haga cada diagrama por separado, y organícelos juntos en un diagrama:

library(gridExtra) p1 <- ggplot(subset(melted.df,variable == ''dollars''), aes(x = value)) + facet_wrap(~variable) + geom_density() + scale_x_log10(labels = dollar_format()) p2 <- ggplot(subset(melted.df,variable == ''counts''), aes(x = value)) + facet_wrap(~variable) + geom_density() grid.arrange(p1,p2)

Acabo de adivinar qué geom_* querías usar, y estoy seguro de que esto no es realmente lo que querías tramar, pero al menos ilustra el principio.