[R] Converting xy plot arguments into a point argument and fixed x-axis scaling

nebulo help nebuloso78 at gmx.ch
Fri Sep 19 22:55:07 CEST 2014


Dear all, 
  
I have a data.frame xy which I am plotting like in the code below (provided is a small data sample with dummy data that should work). 
  
Is there a way how I could convert my xx and yy in the xy plot to a points command so that I could set type='n' and add points afterwards in order to control it better? 
  
In the end what I am also aiming for is a fixed x-axis range (e.g. from 1940 to 2014) and if values before 1940 are present the x axis should be automatic. The y axis should always be in the range of the values generated for each plot. 
  
Thank you for your help! 

Kind regards,
Kurt
  
########################### 
  
Here is my code with sample data: 
  
# read in sample data 
xy <- data.frame(NAME=c("NAME1","NAME1","NAME1","NAME2","NAME2","NAME2"),ID=c(87,87,87,199,199,199), X_START_YEAR=c(1984,1986,1984,1899,1909,1924),Y_START_VALUE=c(75,25,-90,-8,-55,-10),X_END_YEAR=c(1986,1994,1999,1909,1924,1927), Y_END_VALUE=c(20,50,-15,-70,-80,-100)) 
    
# split data.frame into groups (defined by ID in this case) 
ind <- split(xy,xy$ID) 
# plot data by group 
for (x in ind){ 
  xx = unlist(x[,grep('X_',colnames(x))]) 
  yy = unlist(x[,grep('Y_',colnames(x))])     
    fname <- paste0(x[1, 'ID'], '.png') 
    png(fname, width=1679, height=1165, res=150) 
    par(mar=c(6,8,6,5)) 
    plot(xx, 
         yy, 
         main=unique(x[,1]), 
         xlab="Time [Years]", 
         ylab="Value [m]") 
    axis(1, at = seq(1000, 2050, 5), cex.axis=1, labels=FALSE, tcl=-0.3) 
    axis(2, at = seq(-100000, 100000, 500), cex.axis=1, labels=FALSE, tcl=-0.3) 
    x <- x[,-1] 
    segments(x[,2],x[,3],x[,4],x[,5],lwd=2) 
    dev.off() 
  }



More information about the R-help mailing list