2012-08-29 11 views
10

Tengo una tabla como sigue:Usando geom_line con múltiples agrupaciones

> testsizes 
    size value replicate lane 
361 16 6898   1 L1 
362 17 10707   1 L1 
363 18 1786   1 L1 
364 19 1721   1 L1 
365 20 2454   1 L1 
421 16 8486   2 L1 
422 17 26691   2 L1 
423 18 3241   2 L1 
424 19 5068   2 L1 
425 20 7579   2 L1 
481 16 4152   3 L1 
482 17 4452   3 L1 
483 18 899   3 L1 
484 19 1973   3 L1 
485 20 2595   3 L1 
571 16 8284   1 L2 
572 17 9045   1 L2 
573 18 5041   1 L2 
574 19 7160   1 L2 
575 20 9730   1 L2 
631 16 5639   2 L2 
632 17 9773   2 L2 
633 18 2433   2 L2 
634 19 3017   2 L2 
635 20 3864   2 L2 
691 16 10161   3 L2 
692 17 18609   3 L2 
693 18 3760   3 L2 
694 19 3543   3 L2 
695 20 4257   3 L2 

> dput(testsizes) 
structure(list(size = c(16L, 17L, 18L, 19L, 20L, 16L, 17L, 18L, 
19L, 20L, 16L, 17L, 18L, 19L, 20L, 16L, 17L, 18L, 19L, 20L, 16L, 
17L, 18L, 19L, 20L, 16L, 17L, 18L, 19L, 20L), value = c(6898L, 
10707L, 1786L, 1721L, 2454L, 8486L, 26691L, 3241L, 5068L, 7579L, 
4152L, 4452L, 899L, 1973L, 2595L, 8284L, 9045L, 5041L, 7160L, 
9730L, 5639L, 9773L, 2433L, 3017L, 3864L, 10161L, 18609L, 3760L, 
3543L, 4257L), replicate = c("1", "1", "1", "1", "1", "2", "2", 
"2", "2", "2", "3", "3", "3", "3", "3", "1", "1", "1", "1", "1", 
"2", "2", "2", "2", "2", "3", "3", "3", "3", "3"), lane = c("L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L2", "L2", "L2", "L2", "L2", "L2", "L2", "L2", 
"L2", "L2", "L2", "L2", "L2", "L2", "L2")), .Names = c("size", 
"value", "replicate", "lane"), row.names = c(361L, 362L, 363L, 
364L, 365L, 421L, 422L, 423L, 424L, 425L, 481L, 482L, 483L, 484L, 
485L, 571L, 572L, 573L, 574L, 575L, 631L, 632L, 633L, 634L, 635L, 
691L, 692L, 693L, 694L, 695L), class = "data.frame") 

Quiero hacer una gráfica de línea utilizando ggplot que muestra el cambio en el valor a través de tamaños. Por el momento tengo esto, entre las otras combinaciones que he intentado:

ggplot(testlengths, aes(size, value, group=replicate, colour=replicate)) 
    + geom_line() 

enter image description here

Parece que su tratando de incorporar los dos carriles en la misma serie. Pero no puedo encontrar una manera de establecer los carriles como otro factor para agrupar. Quiero que las líneas se agrupen según las categorías de réplica y carril. Los carriles deben estar coloreados, pero las repeticiones no necesitan distinguirse entre sí.

Soy consciente de que probablemente pueda lograr esto mediante la concatenación de los dos grupos en un grupo de antemano. Sin embargo, antes de ir por esa ruta, estoy deambulando si ggplot puede agrupar por más de una agrupación en un gráfico de líneas sin facetas (¿Necesito usar facetas más adelante para otra agrupación)? Siento que debería ser capaz de hacerlo.

+0

Nop. Una estética -> una variable. – joran

+0

Oh, claro. Bien entonces. :( – MattLBeck

+0

Pero puede usar 'lane' como una faceta, con' facet_wrap (~ lane) ', por ejemplo – Andrie

Respuesta

32

Basado de mi comentario acerca de la interacción de los dos:

ggplot(testsizes, aes(x = size, y = value, 
         group = interaction(replicate, lane), 
         colour = lane)) + 
geom_line() 

Lo que da:

enter image description here

+1

Es bueno ver que la opción está allí si es necesario. ¡Gracias por mostrarme esto! – MattLBeck

5

Como señaló @joran, si ggplot pudiera hacer esto por sí mismo, simplemente concatenaría los dos grupos de todos modos. Así que la concatenación de los dos grupos a mí mismo es el camino correcto a seguir y me da el resultado deseado:

> testlengths$replane <- paste(testlengths$replicate, testlengths$lane, sep="_") 

> testlengths 
    size value replicate lane replane 
361 16 6898   1 L1 1_L1 
362 17 10707   1 L1 1_L1 
363 18 1786   1 L1 1_L1 
364 19 1721   1 L1 1_L1 
365 20 2454   1 L1 1_L1 
421 16 8486   2 L1 2_L1 
422 17 26691   2 L1 2_L1 
423 18 3241   2 L1 2_L1 
424 19 5068   2 L1 2_L1 
425 20 7579   2 L1 2_L1 
481 16 4152   3 L1 3_L1 
482 17 4452   3 L1 3_L1 
483 18 899   3 L1 3_L1 
484 19 1973   3 L1 3_L1 
485 20 2595   3 L1 3_L1 
571 16 8284   1 L2 1_L2 
572 17 9045   1 L2 1_L2 
573 18 5041   1 L2 1_L2 
574 19 7160   1 L2 1_L2 
575 20 9730   1 L2 1_L2 
631 16 5639   2 L2 2_L2 
632 17 9773   2 L2 2_L2 
633 18 2433   2 L2 2_L2 
634 19 3017   2 L2 2_L2 
635 20 3864   2 L2 2_L2 
691 16 10161   3 L2 3_L2 
692 17 18609   3 L2 3_L2 
693 18 3760   3 L2 3_L2 
694 19 3543   3 L2 3_L2 
695 20 4257   3 L2 3_L2 

> ggplot(testlengths, aes(size, value, group=replane, colour=lane)) 
    + geom_line() 

enter image description here

supongo que la moraleja aquí es hacer tanto pre-procesamiento de la tabla como sea posible antes de dar a ggplot.

+1

No estoy de acuerdo, una de las fortalezas de ggplot está construido en una funcionalidad que puede transformar y resumir datos, por ejemplo 'stat_summary'. Esta podría ser una de esas excepciones incómodas en las que falla, incluso si es fácil de manejar. – Andy

Cuestiones relacionadas