-
Mauricio Zambrano-Bigiarini authoredMauricio Zambrano-Bigiarini authored
plot_GofPerParticle.R 4.98 KiB
################################################################################
# 'plot_GofPerParticle' #
################################################################################
# Purpose: It plots the value of each parameter and the objective #
# function against the iteration number. #
################################################################################
# Author : Mauricio Zambrano-Bigarini #
# Started : 20-Dec-2010 at JRC, Ispra #
# Modified: 11-Nov-2011 ; 21-Feb-2012 #
################################################################################
plot_GofPerParticle <- function(x, # data.frame with the GoF for each particle per iteration. ncol=number of particles ; nrow = number of iterations
ptype="one", # character, representing the type of plot. Valid values are: in c("one", "many"), for plotting all the particles in the smae figure or in one windows per particle, respectively
nrows="auto",
main=NULL,
xlab="Number of Iterations",
cex=0.4,
cex.main=1.5,
cex.axis=1.7,
cex.lab=1.5,
col=rainbow(ncol(x)),
lty=3,
ylim=NULL,
verbose=TRUE,
...,
#### PNG options ###
do.png=FALSE,
png.width=1500,
png.height=900,
png.res=90,
png.fname="Particles_GofPerIter.png"
) {
# Checking the user provide a valid value for 'ptype'
if (is.na(match(ptype, c("one", "many"))))
stop("Invalid argument: 'ptype' must be in c('one', 'many')")
# Number of iterations that will be analysed
niter <- nrow(x)
iters <- 1:niter
# Number of particles
npart <- ncol(x)
# Computing the number of rows for the plot
if (nrows == "auto") {
if ( npart <= 5 ) lnr <- 1
if ( (npart > 5) & (npart <= 14) ) lnr <- 2
if ( npart > 14 ) lnr <- ceiling(npart/7)
} else lnr <- nrows
# Defining the plotting window
nr <- lnr
nc <- ceiling(npart/lnr)
# Range of the objective function, considering ALL the particles
if (is.null(ylim)) ylim <- range( x, na.rm=TRUE )
##############################################################################
# 2) Plotting #
##############################################################################
msg <- "[ Plotting GoF for each particle vs Number of Model Evaluations"
if (do.png) msg <- paste(msg, " into '", basename(png.fname), sep="")
msg <- paste(msg, "' ... ]", sep="")
message(msg)
if (do.png) png(filename=png.fname, width=png.width, height=png.height, res=png.res)
# Saving default plotting parameters
old.par <- par(no.readonly=TRUE)
if (!do.png) on.exit(par(old.par))
# Doing the plots
if (ptype=="many") {
par(mfrow=c(nr,nc))
if (!is.null(main)) par(oma=c(1,1,3,0))
for ( i in 1:npart ) {
plot(iters,
x[,i],
type="o", lty=lty, col=col[i],
cex=cex, cex.lab=cex.lab, cex.axis=1.5,
main=paste("Particle", i, sep=" "),
xlim=c(1,niter), ylim=ylim,
xlab=xlab,
ylab=paste("Particle", i, sep=" ")
)
} # FOR end
# Adding a main title for the plot
if (!is.null(main)) mtext(main, side=3, line=1, cex=cex.main, outer=TRUE)
} else if (ptype=="one") {
if (is.null(main)) main <- "GoF per Particle"
# Plotting the first particle
plot(iters,
x[,2],
type="o", lty=lty, col=col[1],
cex=cex, cex.lab=cex.lab, cex.axis=1.5,
main=main,
xlim=c(1,niter), ylim=ylim,
xlab=xlab,
ylab="GoF"
)
if (npart > 1) {
for ( i in 2:npart ) {
lines(iters,
x[,i],
type="o", lty=lty, col=col[i],
cex=cex, cex.lab=cex.lab, cex.axis=1.5,
xlim=c(1,niter), ylim=ylim,
xlab=xlab,
ylab="GoF"
)
} # FOR end
} # IF end
} # ELSE end
if (do.png) dev.off()
} # 'plot_GofPerParticle' END
#plot_GofPerParticle(ptype="many", nrows=3 )