2010-01-14 13 views
17

estoy ejecutando una simulación de Monte Carlo y la salida es en la forma:qué siempre tienen que utilizar tramas de datos en ggplot2

> d = data.frame(iter=seq(1, 2), k1 = c(0.2, 0.6), k2=c(0.3, 0.4)) 
> d 
iter k1 k2 
1  0.2 0.3 
2  0.6 0.4 

Las parcelas que desea generar son:

plot(d$iter, d$k1) 
plot(density(d$k1)) 

que saben cómo hacer parcelas equivalentes usando ggplot2, convierte a trama de datos

new_d = data.frame(iter=rep(d$iter, 2), 
        k = c(d$k1, d$k2), 
        label = rep(c('k1', 'k2'), each=2)) 

continuación, el trazado es fácil. Sin embargo, el número de iteraciones puede ser muy grande y el número de k también puede ser grande. Esto significa jugar con un marco de datos muy grande.

¿De todos modos puedo evitar crear este nuevo marco de datos?

Gracias

Respuesta

13

La respuesta breve es "no", no se puede evitar la creación de un marco de datos. ggplot requiere que los datos estén en un marco de datos. Si usa qplot, puede asignarle vectores separados para xey, pero internamente sigue creando un marco de datos fuera de los parámetros que ingresa.

Acepto la sugerencia de juba: aprenda a usar la función reshape , o mejor aún, el paquete reshape con melt/cast funciones. Una vez que te apresures en poner tus datos en formato largo, la creación de asombrosos gráficos ggplot se acerca un paso más.

4

Puede utilizar la función reshape para transformar su trama de datos a formato "largo". ¿Puede ser que sea un poco más rápido que tu código?

R> reshape(d, direction="long",varying=list(c("k1","k2")),v.names="k",times=c("k1","k2")) 
    iter time k id 
1.k1 1 k1 0.2 1 
2.k1 2 k1 0.6 2 
1.k2 1 k2 0.3 1 
2.k2 2 k2 0.4 2 
2

Solo para agregar a las respuestas anteriores. Con qplot puede hacer

p <- qplot(y=d$k2, x=d$k1) 

y luego desde allí construirlo aún más, p. Ej. con

p + theme_bw() 

Pero estoy de acuerdo - derretir/fundir es generalmente el camino a seguir.

Cuestiones relacionadas