#created August 4, 2006
#last revised September 5, 2006
#create dot file for graphviz from ICLUST output
#inspired by sem.path.diagram by J. Fox
"ICLUST.graph" <-
function(ic.results, out.file,min.size=1,short=FALSE,labels=NULL,
size=c(8,6), node.font=c("Helvetica", 14),
edge.font=c("Helvetica", 12), rank.direction=c("RL","TB","LR","BT"), digits=2,title="ICLUST", ...){
if(!missing(out.file)){
out <- file(out.file, "w")
on.exit(close(out))
}
else out <- stdout()
results <- ic.results$results
if (length(labels)==0) {
var.labels <- rownames(ic.results$loadings)} else {var.labels=labels}
# if(dim(var.labels)[1] < dim(var.labels)[2]) {var.labels <- t(var.labels)}
clusters <- as.matrix(ic.results$clusters)
#if(length(clusters)==length(var.labels) ) {clusters <- as.matrix(clusters)}
num <- nrow(results)
if (short) {var.labels <- paste("V",1:nrow,(var.labels),sep="")}
rank.direction <- match.arg(rank.direction)
#first some basic setup parameters
cat( file=out,paste('digraph ICLUST', ' {\n', sep=""))
cat(file=out, paste(' rankdir=', rank.direction, ';\n', sep=""))
cat(file=out, paste(' size="',size[1],',',size[2],'";\n', sep=""))
cat(file=out, paste(' node [fontname="', node.font[1],
'" fontsize=', node.font[2], ' shape=box, width=2];\n', sep=""))
cat(file=out, paste(' edge [fontname="', edge.font[1],
'" fontsize=', edge.font[2], '];\n', sep=""))
cat(file=out, paste(' label = "' ,title,'";
fontsize=20;\n', sep=""))
#create the items as boxes
#add the sign from the clusters
num.var <- nrow(results)+1 #how many variables?
if (num.var > dim(clusters)[1]) {num.var <- dim(clusters)[1]}
for (i in 1:num.var) { if (max(clusters[i,]) > 0 ) {
cat(file=out,paste('V',i,' [label = "',var.labels[i], '"];\n', sep="")) } else {
cat(file=out,paste('V',i,' [label = "-',var.labels[i], '"];\n', sep="")) }
}
#show the cluster structure with ellipses
cat(file=out,paste('node [shape=ellipse, width ="1"];\n', sep=""))
#draw the edges
for (i in 1:num) {if(results[i,1]>0) { #avoid printing null results
cat(file=out,paste(row.names(results)[i], '-> ', results[i,1], ' [ label = ',round(results[i,"r1"],digits),' ];\n', sep=""))
cat(file=out,paste(row.names(results)[i], '-> ', results[i,2], ' [ label = ',round(results[i,"r2"],digits),' ];\n', sep=""))
}}
#label the clusters with alpha and beta
for (i in 1:num) {if(results[i,1]>0) { #don't print blank results
if (results[i,"size"] > min.size) {
cat(file=out,paste(row.names(results)[i], ' [label = "',row.names(results)[i],'\\n alpha= ',round(results[i,"alpha"],digits),'\\n beta= ' ,round(results[i,"beta"],digits),'\\nN= ',results[i,"size"], '"] ;\n', sep=""))
} else {cat(file=out,paste(row.names(results)[i],' ;\n', sep="")) } #short names for small clusters
}}
#keep the boxes all at the same rank (presumably the left side)
cat(file=out, paste('{ rank=same;\n', sep=""))
for (i in 1:num.var) { cat(file=out,paste('V',i,';', sep=""))
}
cat(file=out, paste('}}', sep="")) # we are finished
} # end of ICLUST.graph
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.