How do I get discrete factor levels to be treated as continuous?

59,718

Solution 1

I think you can do this simply by transforming the variable to numeric:

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()

Solution 2

You need to convert your factor into numeric:

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()

Or just do the conversion in the call to ggplot:

g <- ggplot(mdf,aes(as.numeric(as.character(variable)),value,group=variable,colour=t))
Share:
59,718
lafras
Author by

lafras

Updated on July 18, 2020

Comments

  • lafras
    lafras almost 4 years

    I have a data frame with columns initially labeled arbitrarily. Later on, I want to change these levels to numerical values. The following script illustrates the problem.

    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()
    

    This plot is produced.

    enter image description here

    The 'variable' quantities are evenly spaced on the plot, even though numerically this is not true. How can I get the spacing on the x-axis correct?