From: Arnaud Giersch Date: Mon, 4 Mar 2013 16:48:08 +0000 (+0100) Subject: Define a function for plotting. X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba-papers.git/commitdiff_plain/3dde28334c43de22323538f3bab0c463fa4a5346?ds=inline Define a function for plotting. --- diff --git a/supercomp11/data/script.r b/supercomp11/data/script.r index f15d382..9694aba 100644 --- a/supercomp11/data/script.r +++ b/supercomp11/data/script.r @@ -1,92 +1,113 @@ -# Usage: launch R, and then: source("script.r") +## Usage: launch R, and then: source("script.r") -# load dataset (variable is "ds") +## load dataset (variable is "ds") load("data.rda") -# extract data for plain algorithms, in real mode -ds.base <- subset(ds, Mode == "R" & grepl("[lt]_plain", Algo)) +## extract data for plain algorithms, in real mode +#ds.base <- subset(ds, Mode == "R" & grepl("[lt]_plain", Algo)) -# extract data for one experiment +## extract data for one experiment #xx <- subset(ds, # Mode == "R" & Distrib == 1 & Ratio == "1:1" & # Platform == "cluster" & Size == 16 & Topo == "line") -xx <- subset(ds, - Mode == "R" & Distrib == "N" & Ratio == "1:1" & - Platform == "cluster" & Topo == "hcube") -# only keep plain algorithms with default value for k... -xx <- subset(xx, grepl("[lt]_plain", Algo)) -# reorder lines (first "plain", then "bookkeeping") -xx <- rbind(subset(xx, grepl("plain", Algo)), - subset(xx, grepl("bookkeeping", Algo))) -xx <- xx[order(xx$Size), ] +draw <- function(dset = ds, + draw_mode = "R", + draw_distrib = 1, + draw_ratio = "1:1", + draw_platform = "cluster", + draw_topo = "hcube") { -# finally, add an "Index" attribute(, for further processing -xx <- cbind(xx, Index=c(1:length(xx$Size))) + ## extract desired data + dset <- subset(dset, + Mode == draw_mode & Distrib == draw_distrib & + Ratio == draw_ratio & + Platform == draw_platform & Topo == draw_topo) -# save the graphical parameters -p <- par(no.readonly=TRUE) + ## reorder lines (first "plain", then "bookkeeping") + dset <- rbind(subset(dset, grepl("plain", Algo)), + subset(dset, grepl("bookkeeping", Algo))) + dset <- dset[order(dset$Size), ] + ## finally, add an "Index" attribute(, for further processing + dset <- cbind(dset, Index=seq(1, length(dset$Size))) # FIXME + + #print(dset) + + ## save the graphical parameters + p <- par(no.readonly=TRUE) ### TODO ### - add some spacing between each size ### - fill in empty rows (e.g. with large size) ### - add a label telling the size -par(mar=c(13, 4, 4, 4) + 0.1, # change margins - mgp=c(11, 1, 0)) + par(mar=c(13, 4, 4, 4) + 0.1, # change margins + mgp=c(11, 1, 0)) + + par(las=3) # always draw labels vertically -par(las=3) # always draw labels vertically + ## compute the time range: 0..max+20% + time_range <- c(0, range(dset$Conv_max)[2] * 1.2) -# compute the time range: 0..max+20% -time_range <- c(0, range(xx$Conv_max)[2] * 1.2) + ## first draw the bars + barplot(dset$Conv_max, axes=FALSE, col="red", + names=dset$Algo, + ylim=time_range) + barplot(dset$Conv_avg, axes=FALSE, col="green", + add=TRUE) + barplot(dset$Idle_avg, axes=FALSE, col="blue", + add=TRUE) -# first draw the bars -barplot(xx$Conv_max, axes=FALSE, col="red", - names=xx$Algo, - ylim=time_range) -barplot(xx$Conv_avg, axes=FALSE, col="green", - add=TRUE) -barplot(xx$Idle_avg, axes=FALSE, col="blue", - add=TRUE) + ## draw the time axis on the left + axis(2, labels=TRUE) + mtext("Time (s)", side=2, line=2.5) -# draw the time axis on the left -axis(2, labels=TRUE) -mtext("Time (s)", side=2, line=2.5) + title(xlab="Algorithms") -title(xlab="Algorithms") + ## compute the data range + x_data_range <- c(0.6, length(dset$Algo) + 0.4) + data_range <- c(0, range(dset$Data_amnt)[2] * 1.04) -# start a new graph, but drawn on the same device + ## draw the data amnt line graphs + for (alg in unique(dset$Algo)) { + print(alg); + dset.da <- subset(dset, Algo == alg) + ## start a new graph, but drawn on the same device + par(new=TRUE) + plot(dset.da$Index, dset.da$Data_amnt, axes=FALSE, xlab="", type="b", + xlim=x_data_range, + yaxs="i", ylim=data_range) + } -# compute the data range -x_data_range <- c(0.6, length(xx$Algo) + 0.4) -data_range <- c(0, range(xx$Data_amnt)[2] * 1.04) + ## draw the data amnt axis on the right + axis(4, labels=TRUE) + mtext("Data amount (relative)", side=4, line=2.5) -# draw the data amnt line graph -#par(new=TRUE) -#plot(xx$Data_amnt, axes=FALSE, xlab="", type="b", -# xlim=x_data_range, -# yaxs="i", ylim=data_range) + ## finally, set title + t <- paste0(dset$Mode[1], dset$Distrib[1], " / ", dset$Ratio[1], " / ", + dset$Platform[1], " / ", dset$Topo[1]) + title(main=t) + + ## restore the graphical parameters + par(p) + +} -for (alg in unique(xx$Algo)) { - print(alg); - yy <- subset(xx, Algo == alg) - par(new=TRUE) - plot(yy$Index, yy$Data_amnt, axes=FALSE, xlab="", type="b", - xlim=x_data_range, - yaxs="i", ylim=data_range) +msg <- function(text, + wait = TRUE) { + if (wait) + readline("Press to continue\n") + message(text) } -# draw the data amnt axis on the right -axis(4, labels=TRUE) -mtext("Data amount (relative)", side=4, line=2.5) +msg("First test, with algorithms \"plain\"...", wait = FALSE); +draw(subset(ds, grepl("[lt]_plain", Algo))) -# finally, set title -t <- paste0(xx$Mode[1], xx$Distrib[1], " / ", xx$Ratio[1], " / ", - xx$Platform[1], " / ", xx$Topo[1]) -title(main=t) +msg("Second test, with algorithms \"bookkeeping\"..."); +draw(subset(ds, grepl("[lt]_bookkeeping", Algo))) -# restore the graphical parameters -par(p) +msg("Third test, with all algorithms..."); +draw()