2011-06-17 16 views
7

Tengo un marco de datos con columnas etiquetadas inicialmente arbitrariamente. Más adelante, quiero cambiar estos niveles a valores numéricos. El siguiente script ilustra el problema.¿Cómo consigo que los niveles discretos de factores sean tratados como continuos?

library(ggplot2) 
library(reshape2) 

m <- 10 
n <- 6 

nam <- list(c(),letters[1:n]) 
var <- as.data.frame(matrix(sort(rnorm(m*n)),m,n,F,nam)) 
dtf <- data.frame(t=seq(m)*0.1, var) 
mdf <- melt(dtf, id=c('t')) 

xs <- c(0.25,0.5,1.0,2.0,4.0,8.0) 
levels(mdf$variable) <- xs 

g <- ggplot(mdf,aes(variable,value,group=variable,colour=t)) 
g + 
    geom_point() + 
    #scale_x_continuous() + 
    opts() 

Este gráfico está producido.

enter image description here

cantidades La 'variable' están espaciados de manera uniforme sobre la trama, aunque numéricamente esto no es cierto. ¿Cómo puedo hacer que el espaciado en el eje x sea correcto?

+0

también, wellspacedcodeiseasiertoread – Chase

Respuesta

11

Creo que se puede hacer esto simplemente mediante la transformación de la variable a numérico:

mdf$variable <- as.numeric(as.character(mdf$variable)) 

g <- ggplot(mdf,aes(variable,value,group=variable,colour=t)) 
g + 
    geom_point() + 
    #scale_x_continuous() + 
    opts() 
3

Es necesario para convertir su factor de al numérico:

mdf$numVariable <- as.numeric(as.character(mdf$variable)) 

g <- ggplot(mdf,aes(numVariable,value,group=variable,colour=t)) 
g + 
    geom_point() + 
    #scale_x_continuous() + 
    opts() 

O simplemente hacer la conversión en la llamada a ggplot:

g <- ggplot(mdf,aes(as.numeric(as.character(variable)),value,group=variable,colour=t)) 
Cuestiones relacionadas