2010-08-06 30 views
9

Me gustaría saber cómo hacerlo para que xey en el siguiente conjunto de datos de ejemplo se tracen en el eje vertical para cada elemento del marco en el eje horizontal. ¿Cómo hago esto con ggplot2?ggplot y R: Dos variables a lo largo del tiempo

x, y = variables, frame = AAAAMM

Ejemplo de datos:

df <- structure(list(x = c(0.000892333625290767, 0.0161153931761482, 
0.0188150880795816, 0.0268699106638318, 0.018657330651898, 0.0101065034206662, 
0.00154410447630379), y = c(1.35172948829027, 0.59654026447333, 
0.685835030118683, 0.741545898152761, 1.09653338596292, 0.119448208345102, 
0.104092642854814), frame = c(200912, 201001, 201002, 201003, 
201004, 201005, 201006)), .Names = c("x", "y", "frame"), row.names = c("1", 
"2", "3", "4", "5", "6", "7"), class = "data.frame") 

he sido capaz de conseguir uno trazada en una línea, pero parece que no es el reconocimiento de mi cuerpo como categórico (no es que lo sea, ni sé cómo cambiarlo).

p <- ggplot(df, aes(x=frame, y=x)) 
p + geom_line() 

Respuesta

10

Usted necesita para fundir sus datos:

library(reshape2) 
dfm = melt(df, id.vars='frame') 
ggplot(dfm, aes(x=frame, y=value, colour=variable)) + geom_line() 

Esto es lo que hace a su trama de datos:

> dfm 
    frame variable  value 
1 200912  x 0.0008923336 
2 201001  x 0.0161153932 
3 201002  x 0.0188150881 
4 201003  x 0.0268699107 
5 201004  x 0.0186573307 
6 201005  x 0.0101065034 
7 201006  x 0.0015441045 
8 200912  y 1.3517294883 
9 201001  y 0.5965402645 
10 201002  y 0.6858350301 
11 201003  y 0.7415458982 
12 201004  y 1.0965333860 
13 201005  y 0.1194482083 
14 201006  y 0.1040926429 
+0

Gracias, pero esto sigue tratando marco como una variable continua, cuando debería ser categórica –

+1

antes derritiendo, convierte el marco en un factor: df $ frame = factor (df $ frame) – Greg

9

Esta es una respuesta bastante tarde, pero si usted quiere que su frame fecha variable interpretada (mes del año), luego conviértala a una fecha.

A continuación, puede utilizar scale_x_date y el paquete scales para dar formato al eje x

DF <- melt(df, id.vars = 'frame') 
# note that I am arbitrarily setting each month to be the 15th 
# day of the month, to create a complete date 
DF$date <- as.Date(paste0(as.character(df$frame), '15'), '%Y%M%d') 
library(scales) 
ggplot(DF, aes(x =frame, y = value, colour = variable)) + 
geom_line() + 
scale_x_date('Month', labels = date_format('%b %Y'), breaks = date_breaks('2 months')) 

enter image description here

Cuestiones relacionadas