"drawStory.MBnetwork.MBparams" <- function(network,params,names,par=1,score=c("P","L"),prop=.01,layout=NULL,full=TRUE,label.neigh=FALSE,cent.size=7,neigh.size=3,size.by.score=TRUE,font=5) { # Consistency checks isCompat <- compatObjects(network,params) if((params@m < 1) || (length(par) != 1) || !(par %in% 1:params@m)) stop("par out of range") graph.sub <- as.logical(rowSumsSp(params@Sim[[par]])) names <- unique(names) Names <- network@Names[graph.sub] if(is.null(names) || !length(names) || !all(names %in% Names)) stop("Invalid names (includes genes that have no associated knowledge)") score <- match.arg(score) require(tcltk,quietly=TRUE) # Calculate original scores scores.orig <- log(network@Cpds[2,]*prop/(network@Cpds[1,]*(1-prop))) # Extract new scores if(score=="P") scores.new <- -1*network@Pvals else scores.new <- calcLods(network) # Build graph Sim <- params@Sim[[par]][graph.sub,graph.sub] centers <- as.numeric(sapply(names,function(x) which(Names == x))) neighbors <- unique(unlist(lapply(centers,function(x) which(as.numeric(as.matrix(Sim[x,]))>0)))) neighbors <- neighbors[!(neighbors %in% centers)] allnodes <- c(centers,neighbors) rank.diff <- rank(-1*scores.orig,ties.method="min")[graph.sub] - rank(-1*scores.new,ties.method="min")[graph.sub] nodecolors <- rep("Gray",sum(graph.sub)) nodecolors[allnodes] <- "SkyBlue2" nodecolors[allnodes][rank.diff[allnodes] > 0] <- "Red" nodesizes <- rep(3,sum(graph.sub)) if(size.by.score) { m.factor <- abs(cent.size-neigh.size)/diff(range(scores.new,na.rm=TRUE)) nodesizes[allnodes][rank.diff[allnodes] > 0] <- (scores.new[graph.sub][allnodes][rank.diff[allnodes] > 0]-min(scores.new,na.rm=TRUE))*m.factor + min(c(cent.size,neigh.size)) nodesizes[allnodes][rank.diff[allnodes] <= 0] <- (scores.new[graph.sub][allnodes][rank.diff[allnodes] <= 0]-min(scores.new,na.rm=TRUE))*-1*m.factor + max(c(cent.size,neigh.size)) } else { nodesizes[centers] <- cent.size nodesizes[neighbors] <- neigh.size } nodelabels <- rep(NA,sum(graph.sub)) if(label.neigh) nodelabels[allnodes] <- Names[allnodes] else nodelabels[centers] <- Names[centers] params.mat <- matrix(0,nrow=sum(graph.sub),ncol=sum(graph.sub)) params.mat[allnodes,allnodes] <- as.matrix(Sim[allnodes,allnodes]) if(!full) { nodecolors <- nodecolors[allnodes] nodesizes <- nodesizes[allnodes] nodelabels <- nodelabels[allnodes] params.mat <- params.mat[allnodes,allnodes] } params.graph <- graph.adjacency(params.mat,mode="undirected") if(is.null(layout)) layout <- layout.fruchterman.reingold(params.graph) else if(!is.matrix(layout) || !is.numeric(layout) || any(layout < 0) || (nrow(layout) != nrow(params.mat)) || (ncol(layout) != 2)) stop("Bad layout") label.font <- tkfont.create(family="helvetica",size=font,weight="bold") # Plot tkplot(params.graph, layout=layout, vertex.size=nodesizes, vertex.color=nodecolors, edge.width=1, vertex.label=nodelabels, vertex.label.font=label.font) }