print - Looping sobre variables en ggplot
print ggplot in a loop r (3)
Dependiendo de lo que estés tratando de hacer, me parece que facet_wrap
o facet_grid
funcionan bien para crear múltiples gráficos con la misma estructura básica. Algo como esto debería llevarte al estadio correcto:
t.m = melt(t, id="w")
ggplot(t.m, aes(w, value)) + facet_wrap(~ variable) + geom_line()
Quiero usar ggplot para recorrer varias columnas para crear múltiples gráficos, pero usar el marcador de posición en el ciclo for cambia el comportamiento de ggplot.
Si tengo esto:
t <- data.frame(w = c(1, 2, 3, 4), x = c(23,45,23, 34),
y = c(23,34,54, 23), z = c(23,12,54, 32))
Esto funciona bien:
ggplot(data=t, aes(w, x)) + geom_line()
Pero esto no:
i <- ''x''
ggplot(data=t, aes(w, i)) + geom_line()
Lo cual es un problema si quiero eventualmente pasar por encima de x, y y z. ¿Alguna ayuda?
El problema es cómo accede al marco de datos t
. Como probablemente sepa, hay varias formas de hacerlo, pero desafortunadamente usar un personaje obviamente no es uno de ellos en ggplot
.
Una forma en que podría funcionar es usar la posición numérica de la columna en su ejemplo, por ejemplo, podría intentar i <- 2
. Sin embargo, si esto funciona se basa en ggplot que nunca he usado (pero conozco otro trabajo de Hadley y supongo que debería funcionar)
Otra forma de eludir esto es creando un nuevo marco de datos temporal cada vez que llame a ggplot. p.ej:
tmp <- data.frame(a = t[[''w'']], b = t[[i]])
ggplot(data=tmp, aes(a, b)) + geom_line()
Solo necesitas usar aes_string
lugar de aes
, así:
ggplot(data=t, aes_string(x = "w", y = i)) + geom_line()
Tenga en cuenta que w
también debe especificarse como una cadena.