emorway
2010-Dec-22 20:34 UTC
[R] adjust secondary y-axis bounds to minimize visual residuals
Hello, I'm plotting two sets of data referenced to either the left or right y-axes. The first, water table depth (blue circles), is plotted on the left y-axis in reverse order (0 at the top) as this is more intuitive when thinking in terms of depth. The second is electrical conductance (a surrogate for salinity), and is referenced to the right y-axis. The data and plot commands follow below. I've been trying to figure out a way to minimize the variable called "min_this" by changing the values in ylim_2 only, with one constraint: ylim_2[1]>0. I'm unsure of how to stuff the code that follows the plot commands into a loop that adjusts ylim_2 so as to minimize "min_this"? I'm guessing there is a function to do this? Thanks, Eric library(zoo) #example data and plotting commands follow temp.dat<-read.table(textConnection("Well Meas_Date WTD ECgw GW_Project_Area Region Avg.EM.Survey.Value Avg.Soil.Paste.EC SD_EM_Survey 1 4/12/1999 1.75 2.27 LOWER-UPSTREAM US NA NA NA 1 5/11/1999 1.24 5.04 LOWER-UPSTREAM US NA NA NA 1 5/27/1999 1.27 4.45 LOWER-UPSTREAM US NA NA NA 1 6/3/1999 1.27 4.09 LOWER-UPSTREAM US 3.347069 3.126667 0.6347013 1 6/11/1999 1.52 2.84 LOWER-UPSTREAM US NA NA NA 1 6/18/1999 1.19 2.34 LOWER-UPSTREAM US NA NA NA 1 6/24/1999 1.21 2.48 LOWER-UPSTREAM US NA NA NA 1 6/30/1999 1.19 2.45 LOWER-UPSTREAM US NA NA NA 1 7/7/1999 1.59 2.47 LOWER-UPSTREAM US NA NA NA 1 7/14/1999 1.75 2.73 LOWER-UPSTREAM US NA NA NA 1 7/21/1999 1.75 2.33 LOWER-UPSTREAM US NA NA NA 1 7/28/1999 1.78 2.63 LOWER-UPSTREAM US NA NA NA 1 8/4/1999 1.37 2.25 LOWER-UPSTREAM US NA NA NA 1 8/12/1999 0.08 2.37 LOWER-UPSTREAM US 2.858553 NA 0.3560363 1 8/18/1999 2.29 2.48 LOWER-UPSTREAM US NA NA NA 1 9/4/1999 0.02 2.48 LOWER-UPSTREAM US NA NA NA 1 9/16/1999 1.93 2.45 LOWER-UPSTREAM US NA NA NA 1 10/1/1999 2.01 2.49 LOWER-UPSTREAM US NA NA NA 1 11/13/1999 1.91 2.32 LOWER-UPSTREAM US NA NA NA 1 1/4/2000 1.83 2.59 LOWER-UPSTREAM US NA NA NA 1 2/24/2000 1.93 2.83 LOWER-UPSTREAM US NA NA NA 1 3/25/2000 1.73 2.71 LOWER-UPSTREAM US NA NA NA 1 4/15/2000 1.47 3.12 LOWER-UPSTREAM US NA NA NA 1 4/28/2000 1.98 2.76 LOWER-UPSTREAM US NA NA NA 1 5/17/2000 1.80 2.92 LOWER-UPSTREAM US NA NA NA 1 5/30/2000 NA NA <NA> US 3.064330 NA 0.3970829 1 6/1/2000 1.58 2.83 LOWER-UPSTREAM US NA NA NA 1 6/6/2000 1.65 2.97 LOWER-UPSTREAM US NA NA NA 1 6/15/2000 1.85 2.65 LOWER-UPSTREAM US NA NA NA 1 6/23/2000 1.90 2.78 LOWER-UPSTREAM US NA NA NA 1 6/29/2000 1.80 2.67 LOWER-UPSTREAM US NA NA NA 1 7/6/2000 2.00 2.69 LOWER-UPSTREAM US NA NA NA 1 7/14/2000 1.97 3.46 LOWER-UPSTREAM US NA NA NA 1 7/20/2000 1.69 2.57 LOWER-UPSTREAM US NA NA NA 1 7/27/2000 1.95 3.16 LOWER-UPSTREAM US NA NA NA 1 8/2/2000 2.03 3.12 LOWER-UPSTREAM US NA NA NA 1 8/8/2000 NA NA <NA> US 3.185567 2.522467 0.3765025 1 8/11/2000 2.00 2.65 LOWER-UPSTREAM US NA NA NA 1 8/19/2000 1.95 2.50 LOWER-UPSTREAM US NA NA NA 1 9/29/2000 2.11 2.11 LOWER-UPSTREAM US NA NA NA 1 10/20/2000 2.16 2.75 LOWER-UPSTREAM US NA NA NA 1 12/1/2000 1.83 2.81 LOWER-UPSTREAM US NA NA NA 1 1/19/2001 2.01 3.01 LOWER-UPSTREAM US NA NA NA 1 3/5/2001 2.01 2.35 LOWER-UPSTREAM US NA NA NA 1 3/30/2001 2.13 2.10 LOWER-UPSTREAM US NA NA NA 1 4/21/2001 1.87 2.36 LOWER-UPSTREAM US NA NA NA 1 5/15/2001 2.00 2.37 LOWER-UPSTREAM US NA NA NA 1 5/29/2001 1.60 2.59 LOWER-UPSTREAM US NA NA NA 1 6/4/2001 NA NA <NA> US 4.233636 NA 1.3738540 1 6/7/2001 1.71 2.55 LOWER-UPSTREAM US NA NA NA 1 6/14/2001 1.83 2.75 LOWER-UPSTREAM US NA NA NA 1 6/20/2001 1.93 3.02 LOWER-UPSTREAM US NA NA NA 1 6/29/2001 1.80 2.74 LOWER-UPSTREAM US NA NA NA 1 7/6/2001 1.91 2.70 LOWER-UPSTREAM US NA NA NA 1 7/12/2001 2.04 2.46 LOWER-UPSTREAM US NA NA NA 1 7/18/2001 1.87 2.55 LOWER-UPSTREAM US NA NA NA 1 7/25/2001 1.96 2.67 LOWER-UPSTREAM US NA NA NA 1 8/2/2001 2.02 2.42 LOWER-UPSTREAM US NA NA NA 1 8/8/2001 NA NA <NA> US 2.946731 NA 0.3748240 1 8/10/2001 1.94 2.36 LOWER-UPSTREAM US NA NA NA 1 8/17/2001 1.94 0.75 LOWER-UPSTREAM US NA NA NA 1 9/1/2001 2.12 2.22 LOWER-UPSTREAM US NA NA NA 1 9/15/2001 2.15 2.35 LOWER-UPSTREAM US NA NA NA 1 9/29/2001 1.95 2.20 LOWER-UPSTREAM US NA NA NA 1 10/27/2001 1.08 1.72 LOWER-UPSTREAM US NA NA NA 1 11/17/2001 1.99 2.21 LOWER-UPSTREAM US NA NA NA 1 1/10/2002 2.01 2.31 LOWER-UPSTREAM US NA NA NA 1 2/16/2002 1.94 1.74 LOWER-UPSTREAM US NA NA NA 1 3/23/2002 2.03 2.46 LOWER-UPSTREAM US NA NA NA 1 4/13/2002 2.11 2.50 LOWER-UPSTREAM US NA NA NA 1 5/11/2002 2.11 2.54 LOWER-UPSTREAM US NA NA NA 1 5/21/2002 NA NA <NA> US 2.368000 NA 0.3235852 1 5/30/2002 2.07 2.56 LOWER-UPSTREAM US NA NA NA 1 6/6/2002 2.11 2.55 LOWER-UPSTREAM US NA NA NA 1 6/13/2002 2.03 2.66 LOWER-UPSTREAM US NA NA NA 1 6/27/2002 2.19 2.55 LOWER-UPSTREAM US NA NA NA 1 7/3/2002 2.22 2.68 LOWER-UPSTREAM US NA NA NA 1 7/11/2002 2.06 2.61 LOWER-UPSTREAM US NA NA NA 1 7/18/2002 2.23 2.58 LOWER-UPSTREAM US NA NA NA 1 7/25/2002 2.23 2.62 LOWER-UPSTREAM US NA NA NA 1 8/1/2002 2.21 2.60 LOWER-UPSTREAM US NA NA NA 1 8/8/2002 2.29 2.60 LOWER-UPSTREAM US NA NA NA 1 8/14/2002 NA NA <NA> US 1.863548 NA 0.2400621 1 8/15/2002 2.26 2.61 LOWER-UPSTREAM US NA NA NA 1 8/21/2002 2.34 2.51 LOWER-UPSTREAM US NA NA NA 1 9/6/2002 2.31 2.51 LOWER-UPSTREAM US NA NA NA 1 9/21/2002 2.25 2.55 LOWER-UPSTREAM US NA NA NA 1 10/5/2002 2.21 2.57 LOWER-UPSTREAM US NA NA NA 1 11/8/2002 2.09 2.50 LOWER-UPSTREAM US NA NA NA 1 12/23/2002 2.19 2.16 LOWER-UPSTREAM US NA NA NA 1 1/16/2003 2.23 2.15 LOWER-UPSTREAM US NA NA NA 1 3/1/2003 2.12 2.11 LOWER-UPSTREAM US NA NA NA 1 4/5/2003 2.03 1.99 LOWER-UPSTREAM US NA NA NA 1 5/2/2003 2.00 2.42 LOWER-UPSTREAM US NA NA NA 1 5/30/2003 1.66 2.09 LOWER-UPSTREAM US NA NA NA 1 6/3/2003 NA NA <NA> US 3.066333 NA 0.2926846 1 6/6/2003 1.43 2.24 LOWER-UPSTREAM US NA NA NA 1 6/12/2003 1.73 2.81 LOWER-UPSTREAM US NA NA NA 1 6/19/2003 1.51 2.97 LOWER-UPSTREAM US NA NA NA 1 7/3/2003 1.84 3.35 LOWER-UPSTREAM US NA NA NA 1 7/11/2003 2.00 2.52 LOWER-UPSTREAM US NA NA NA 1 7/17/2003 2.04 2.76 LOWER-UPSTREAM US NA NA NA 1 7/24/2003 2.02 2.40 LOWER-UPSTREAM US NA NA NA 1 7/31/2003 1.96 2.14 LOWER-UPSTREAM US NA NA NA 1 8/16/2003 2.29 1.85 LOWER-UPSTREAM US NA NA NA 1 8/20/2003 2.14 2.11 LOWER-UPSTREAM US NA NA NA 1 9/5/2003 2.03 1.45 LOWER-UPSTREAM US NA NA NA 1 10/10/2003 2.10 2.21 LOWER-UPSTREAM US NA NA NA 1 11/15/2003 1.95 1.83 LOWER-UPSTREAM US NA NA NA 1 12/22/2003 2.13 NA LOWER-UPSTREAM US NA NA NA 1 1/16/2004 2.16 2.30 LOWER-UPSTREAM US NA NA NA 1 2/13/2004 2.12 2.13 LOWER-UPSTREAM US NA NA NA 1 3/19/2004 2.02 2.11 LOWER-UPSTREAM US NA NA NA 1 4/23/2004 2.09 2.10 LOWER-UPSTREAM US NA NA NA 1 5/3/2004 1.89 2.42 LOWER-UPSTREAM US NA NA NA 1 5/17/2004 2.02 2.31 LOWER-UPSTREAM US NA NA NA 1 5/24/2004 1.97 2.58 LOWER-UPSTREAM US NA NA NA 1 5/26/2004 NA NA <NA> US 3.532614 NA 0.6329923 1 6/7/2004 1.81 2.70 LOWER-UPSTREAM US NA NA NA 1 6/14/2004 1.66 2.35 LOWER-UPSTREAM US NA NA NA 1 6/28/2004 2.10 2.70 LOWER-UPSTREAM US NA NA NA 1 7/5/2004 1.86 3.25 LOWER-UPSTREAM US NA NA NA 1 7/12/2004 2.00 2.93 LOWER-UPSTREAM US NA NA NA 1 7/19/2004 1.63 2.55 LOWER-UPSTREAM US NA NA NA 1 7/26/2004 2.01 2.65 LOWER-UPSTREAM US NA NA NA 1 8/2/2004 1.91 2.89 LOWER-UPSTREAM US NA NA NA 1 8/9/2004 2.00 2.87 LOWER-UPSTREAM US NA NA NA 1 8/17/2004 2.07 2.77 LOWER-UPSTREAM US NA NA NA 1 9/18/2004 2.18 2.67 LOWER-UPSTREAM US NA NA NA 1 10/23/2004 2.14 2.43 LOWER-UPSTREAM US NA NA NA 1 11/22/2004 2.17 2.38 LOWER-UPSTREAM US NA NA NA 1 12/20/2004 0.32 2.48 LOWER-UPSTREAM US NA NA NA 1 1/11/2005 2.16 2.44 LOWER-UPSTREAM US NA NA NA 1 2/18/2005 2.22 2.27 LOWER-UPSTREAM US NA NA NA 1 3/16/2005 2.06 2.59 LOWER-UPSTREAM US NA NA NA 1 4/9/2005 2.02 2.50 LOWER-UPSTREAM US NA NA NA 1 5/13/2005 1.96 2.62 LOWER-UPSTREAM US NA NA NA 1 6/7/2005 1.96 2.99 LOWER-UPSTREAM US NA NA NA 1 6/13/2005 1.77 2.22 LOWER-UPSTREAM US NA NA NA 1 6/20/2005 1.87 3.05 LOWER-UPSTREAM US NA NA NA 1 6/28/2005 1.76 3.50 LOWER-UPSTREAM US NA NA NA 1 7/5/2005 1.58 3.56 LOWER-UPSTREAM US NA NA NA 1 7/11/2005 1.72 3.22 LOWER-UPSTREAM US NA NA NA 1 7/19/2005 1.98 3.11 LOWER-UPSTREAM US NA NA NA 1 8/1/2005 2.14 3.02 LOWER-UPSTREAM US NA NA NA 1 8/10/2005 NA NA <NA> US 3.465650 4.032000 0.3743813 1 8/16/2005 1.79 3.00 LOWER-UPSTREAM US NA NA NA 1 10/21/2005 4.34 1.07 LOWER-UPSTREAM US NA NA NA 1 11/23/2005 2.08 1.08 LOWER-UPSTREAM US NA NA NA 1 12/21/2005 1.64 2.54 LOWER-UPSTREAM US NA NA NA 1 1/13/2006 2.05 2.01 LOWER-UPSTREAM US NA NA NA 1 2/9/2006 2.10 1.73 LOWER-UPSTREAM US NA NA NA 1 3/13/2006 2.03 2.22 LOWER-UPSTREAM US NA NA NA 1 5/22/2006 1.62 2.38 LOWER-UPSTREAM US NA NA NA 1 5/29/2006 1.61 2.29 LOWER-UPSTREAM US NA NA NA 1 6/13/2006 1.53 2.39 LOWER-UPSTREAM US NA NA NA 1 6/19/2006 1.77 2.49 LOWER-UPSTREAM US NA NA NA 1 6/20/2006 1.86 NA LOWER-UPSTREAM US NA NA NA 1 6/26/2006 1.89 3.12 LOWER-UPSTREAM US NA NA NA 1 7/3/2006 1.90 2.95 LOWER-UPSTREAM US NA NA NA 1 7/11/2006 1.26 2.49 LOWER-UPSTREAM US NA NA NA 1 7/18/2006 1.83 2.86 LOWER-UPSTREAM US NA NA NA 1 7/31/2006 1.92 2.89 LOWER-UPSTREAM US NA NA NA 1 8/15/2006 2.00 1.87 LOWER-UPSTREAM US NA NA NA 1 9/22/2006 2.07 1.62 LOWER-UPSTREAM US NA NA NA 1 11/5/2006 1.92 1.67 LOWER-UPSTREAM US NA NA NA 1 12/18/2006 2.03 1.66 LOWER-UPSTREAM US NA NA NA 1 5/24/2007 1.49 NA LOWER-UPSTREAM US NA NA NA 1 10/6/2007 2.13 NA LOWER-UPSTREAM US NA NA NA 1 12/16/2007 2.03 1.36 LOWER-UPSTREAM US NA NA NA 1 1/18/2008 2.07 1.73 LOWER-UPSTREAM US NA NA NA 1 4/19/2008 1.92 1.91 LOWER-UPSTREAM US NA NA NA 1 3/18/2010 0.61 3.20 LOWER-UPSTREAM US NA NA NA 1 5/24/2010 2.04 2.22 LOWER-UPSTREAM US NA NA NA"),header=T) closeAllConnections() plot(as.Date(temp.dat$Meas_Date,"%m/%d/%Y"),temp.dat$WTD,xlim=c(as.Date("1999-01-01"),as.Date("2005-11-01")),ylim=rev(c(0,max(na.omit(temp.dat$WTD))+1)),pch=19,lwd=1.5,col="blue",cex=0.5,xlab="",ylab="",xaxt="n",type="p",las=1) par(new=T) plot(as.Date(temp.dat$Meas_Date,"%m/%d/%Y"),temp.dat$Avg.EM.Survey.Value,xlim=c(as.Date("1999-01-01"),as.Date("2005-11-01")),ylim=c(floor(min(range(na.omit(temp.dat$Avg.EM.Survey.Value))[1],range(na.omit(temp.dat$Avg.Soil.Paste.EC))[1])),ceiling(max(range(na.omit(temp.dat$Avg.EM.Survey.Value))[2],range(na.omit(temp.dat$Avg.Soil.Paste.EC))[2]))),xlab="",ylab="WTD (m)",xaxt="n",yaxt="n",pch=15,col="darkgreen",cex=0.75) axis(side=4,at=seq(floor(min(range(na.omit(temp.dat$Avg.EM.Survey.Value))[1],range(na.omit(temp.dat$Avg.Soil.Paste.EC))[1])),ceiling(max(range(na.omit(temp.dat$Avg.EM.Survey.Value))[2],range(na.omit(temp.dat$Avg.Soil.Paste.EC))[2])),by=1),labels=seq(floor(min(range(na.omit(temp.dat$Avg.EM.Survey.Value))[1],range(na.omit(temp.dat$Avg.Soil.Paste.EC))[1])),ceiling(max(range(na.omit(temp.dat$Avg.EM.Survey.Value))[2],range(na.omit(temp.dat$Avg.Soil.Paste.EC))[2])),by=1),las=1) #the current limits of the left and right y-axes ylim_1<-rev(c(0,max(na.omit(temp.dat$WTD))+1)) ylim_2<-c(floor(min(range(na.omit(temp.dat$Avg.EM.Survey.Value))[1],range(na.omit(temp.dat$Avg.Soil.Paste.EC))[1])),ceiling(max(range(na.omit(temp.dat$Avg.EM.Survey.Value))[2],range(na.omit(temp.dat$Avg.Soil.Paste.EC))[2]))) #solve for "x", the coeffs to map the right #referenced values to their left-axis equivalent A<-matrix(c(ylim_2,1,1),nrow=2,ncol=2,byrow=F) RHS<-matrix(ylim_1,nrow=2,ncol=1,byrow=T) x<-solve(A,RHS) #interpolate missing WTD values temp.dat$WTD<-na.approx(temp.dat$WTD,as.numeric(as.Date(temp.dat$Meas_Date,"%m/%d/%Y"))) #map the right-referenced values to their #corresponding left-axis values temp.dat.mapped<-x[1,1]*temp.dat$Avg.EM.Survey.Value+x[2,1] #calculate the resids between green squares and blue circles resids<-na.omit(data.frame(Col1=temp.dat$WTD,Col2=temp.dat.mapped,SumSqrDiff=(temp.dat$WTD-temp.dat.mapped)^2)) #quantity to be minimized min_this<-sum(resids$SumSqrDiff) -- View this message in context: http://r.789695.n4.nabble.com/adjust-secondary-y-axis-bounds-to-minimize-visual-residuals-tp3161213p3161213.html Sent from the R help mailing list archive at Nabble.com.