I ran out of time a couple of months ago and decided to use the following quick hack to generatea Kiviat plot using ggplot2’s coord_polar function.
The result

Sample Dataset Used
> dataset <- read.table('experiments-performance-kiviat.dat', header=TRUE, sep=',')
> dataset
Workload Indexing Ingestion OAI.PMH.data.provider RSS.Feed Search
1 100 0.86 0.1213379 480 3.130493e+00 2.466736e+01
2 200 0.86 0.1166992 980 5.613892e+00 4.787427e+01
3 400 1.14 0.1174316 2000 1.099023e+01 9.738324e+01
4 800 1.32 0.1179199 4120 2.089575e+01 1.919023e+02
5 1600 2.14 0.1170247 5410 4.034625e+01 3.869901e+02
6 3200 3.13 0.1193034 5940 7.885956e+01 7.683469e+02
7 6400 5.33 0.1194661 6730 1.565882e+02 1.531056e+03
8 12800 10.61 0.1269531 8370 3.099473e+02 3.093123e+03
9 25600 17.99 0.1186523 11680 6.167455e+02 6.172219e+03
10 51200 35.66 0.1223145 18900 1.237004e+03 1.248706e+04
11 102400 70.36 0.1350098 33460 2.505255e+03 2.510874e+04
12 204800 148.22 0.1280111 66950 5.117130e+03 4.930145e+04
13 409600 3618.62 0.1213379 139720 1.053439e+04 1.002673e+05
14 819200 8337.75 0.1241048 586450 1.374618e+05 7.365254e+06
15 1638400 19968.95 0.1243490 1937090 1.503809e+06 1.866471e+07
>
The plot
# import libraries
require(ggplot2)
require(reshape2)
require(grid)
require(scales)
require(fmsb)
require(ggthemes)
# import datafeeds
dataset <- read.table("plot.experiments-performance-kiviat.dat", header=TRUE, sep=",")
# re-order and rename workloads
dataset$Workload <- factor(dataset$Workload, levels=c(100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800, 409600, 819200, 1638400), labels=c("100","200","400","800","1.6k","3.2k","6.4k","12.8k","25.6k","51.2k","102.4k","204.8k","409.6k","819.2k","1638.4k"))
# convert dataset to molten form for ggplot2
experimentdataset <- melt(dataset, id.vars=c(1))
# rename/normalise performance evaluation aspects
levels(experimentdataset$variable)[levels(experimentdataset$variable)=="Indexing"] <- paste("Index","")
levels(experimentdataset$variable)[levels(experimentdataset$variable)=="Ingestion"] <- paste("Ingest","")
levels(experimentdataset$variable)[levels(experimentdataset$variable)=="OAI.PMH.data.provider"] <- paste("OAI-PMH","")
levels(experimentdataset$variable)[levels(experimentdataset$variable)=="RSS.Feed"] <- paste("Feed","")
levels(experimentdataset$variable)[levels(experimentdataset$variable)=="Search"] <- paste("Search","")
# generate plot
ggplot(experimentdataset,
aes(x=variable,
y=value,
colour=as.factor(Workload),
group=as.factor(Workload))) +
geom_line(aes(linetype=as.factor(Workload)),size=1.5) +
coord_polar(theta="x", direction=-1) +
scale_linetype_manual(values=c("solid","dashed","dotted","dotdash","longdash","solid","dashed","dotted","dotdash","longdash","solid","dashed","dotted","dotdash","longdash")) +
scale_y_log10(breaks=trans_breaks("log10", function(x) 10^x), labels=trans_format("log10", math_format(10^.x))) +
labs(x="", y="log10(Time [ms])") +
theme_igray() +
scale_colour_stata() +
theme(legend.title=element_blank(),
legend.position="bottom",
legend.text=element_text(size=8),
#legend.key.height=unit(0.35,"cm"),
#plot.margin=unit(c(0.2,0.15,0.05,0.8),"cm"),
plot.margin=unit(c(0.5,0.5,0,0.8),"cm"),
strip.text = element_text(size=9),
axis.text = element_text(size=8),
axis.title.y = element_text(vjust=-0.2,size=10)) +
guides(linetype = guide_legend(nrow = 3))
@