# create a plot
plot( x, y )
# assign a unique label to the plotpanel_labeler()
Below the break is a definition for the panel_labeler() function using a closure in R. Shown are some examples of using panel_labeler() assign labels to plots. The plots show different methods for combining mixtures of Normal distributions, but this approach could be used for plotting anything.
make.labeler = function() {
current_label = 0
fn = function( location = "topleft" ) {
current_label <<- current_label + 1
legend( location, legend = as.character(current_label), bty = 'n' )
}
return(fn)
}
panel_labeler = make.labeler()
x = seq( from = 4, to = 20, by = 0.01 )
mix1 = 0.7 * dnorm( x, mean = 4, sd = 1.5 ) + 0.3 * dnorm( x, mean = 18.3, sd = 7.3 )
mix2 = 0.7 * dnorm( x, mean = 9, sd = 2.0 ) + 0.3 * dnorm( x, mean = 18.3, sd = 7.3 )
ylim = c(0,max(mix1,mix2))
plot( x, mix1, type = 'l', ylab = "P(d)", col = 2 )
lines( x, mix2, type = 'l', col = 4 )
legend( "topright", legend = c("mix1","mix2"), col = c(2,4), lty = 1 )
panel_labeler() # panel 1
plot ( x, mix1 / 2 + mix2 / 2, type = 'l', ylim = ylim, ylab = "P(d)" )
lines( x, mix1 * mix2, type = 'l', lty = 2 )
legend( "topright", legend = c("sum","product"), lty = c(1,2) )
panel_labeler() # panel 2
plot ( x, mix1 / 2 + mix2 / 2, type = 'l', ylim = ylim, ylab = "P(d)" )
lines( x, 6 * mix1 * mix2, type = 'l', lty = 2 )
legend( "topright", legend = c("sum","6 * product"), lty = c(1,2) )
panel_labeler() # panel 3
plot ( x, -1 * log( mix1 / 2 + mix2 / 2 ), type = 'l', ylab = "-ln(P(d))", ylim = c(0,9) )
lines( x, -1 * log( mix1 * mix2 ), type = 'l', lty = 2 )
lines( x, -1 * log( mix1 ), type = 'l', col = 2 )
lines( x, -1 * log( mix2 ), type = 'l', col = 4 )
legend( "bottomright", legend = c("mix1","mix2","-ln(sum)","-ln(product)"), lty = c(1,1,1,2), cex = 0.8, col = c(2,4,1,1) )
panel_labeler() # panel 4