Search code examples
rplotcolors

vector specification to "col", "lwd" and "lty" not working when drawing lines?


I have matrix dsts with 3 columns; third is a factor. I want my linear plot to be colored by the factor but this command is not working:

plot(dsts[ ,'x'],dsts[,'dist'],col=dsts[,'i'],type='l')

and,

plot(dsts[ ,'x'],dsts[,'dist'],col=dsts[,'i'],type='n')
lines(dsts[ ,'x'],dsts[,'dist'],col=dsts[,'i']) 

is not working either!!!

I want to avoid using matplot which accepts matrices.


Solution

  • On top of @Zheyuan Li valuable insight, I wrote a simple function to solve the problem:

    plot_line_color <- function(x,y,fact,lwd=2,...) 
    {
      plot(x,y,type='n')
      xy <- cbind(x,y)
      invisible(
       lapply(1:length(unique(fact)), function(j) { 
         xy2 <- subset(xy,fact==j)
        lines(xy2[ ,1],xy2[,2],col=j,lwd=lwd,...)
        })
      )
    }
    

    A simple simulation:

    k <- 1:5
    x <- seq(0,10,length.out =  100)
    dsts <- lapply(1:length(k), function(i) cbind(x=x, distri=dchisq(x,k[i]),fact=i) )
    dsts <- do.call(rbind,dsts)
    
    plot_line_color(x=dsts[,1],y=dsts[,2],fact=dsts[,3])