Network matrix visualization in R

July 24, 2017

Work in progress!!!

Heat map experiments

> setwd("C:/Users/batagelj/Documents/2017/rusija/daria")
> load("W.Rdata")
> palf <- colorRampPalette(c("white", "black"))
> heatmap(W,Rowv=NA,Colv=NA,col=palf(6),scale="none",margins=c(10,10))
> heatmap(W,Rowv=NA,Colv=NA,col=palf(6),scale="none",margins=c(6,6))
> library(RColorBrewer)
> rc <- rainbow(nrow(n2), start = 0, end = .3)
> cc <- rainbow(ncol(n2), start = 0, end = .3)
> heatmap(x=n2,Rowv=NA,Colv=NA,col=col,symm=TRUE,cexRow=0.3,cexCol=0.3,RowSideColors = rc, ColSideColors = cc)
> p <- as.integer(read.csv("BMstruct.per",header=FALSE,skip=1)$V1)
> C <- as.integer(read.csv("BMstruct.clu",header=FALSE,skip=1)$V1)
> C <- C+1
> heatmap(x=n2,Rowv=p,Colv=p,col=col,symm=TRUE,cexRow=0.3,cexCol=0.3,RowSideColors=rc,ColSideColors=cc)

It seems that the built-in procedure does not use the corrected dissimilarity for clustering the network. This can be repaired by setting distfun=netDist from clustering_the_migration_network

> netDist <- function(A){ n <- nrow(A)
+   D <- matrix(nrow=n,ncol=n,dimnames=dimnames(A)); diag(D) <- 0
+   for(v in 2:n){
+     for(u in 1:(v-1)) {
+       d <- sum((A[v,]-A[u,])**2) - (A[v,u]-A[u,u])**2 - (A[v,v]-A[u,v])**2 +
+            (A[v,u]-A[u,v])**2 + (A[v,v]-A[u,u])**2 
+       D[v,u] <- D[u,v] <- sqrt(d)
+     } 
+   }
+   return(as.dist(D)) 
+ }
> h <- heatmap(x=n2,distfun=netDist,Rowv=p,Colv=p,col=col,symm=TRUE,
+ cexRow=0.3,cexCol=0.3,RowSideColors=rc,ColSideColors=cc)
> h <- heatmap(x=n2,distfun=netDist,Rowv=p,Colv=p,col=col,symm=TRUE,
+ cexRow=0.3,cexCol=0.3,RowSideColors=rc,ColSideColors=cc,revC=TRUE)
> library(gplots)
> h <- heatmap.2(x=n2,distfun=netDist,Rowv=p,Colv=p,col=col,symm=TRUE,
+ cexRow=0.3,cexCol=0.3,RowSideColors=rc,ColSideColors=cc,
+ revC=TRUE,dendrogram="row")

> svg("PAJheat2.svg",width=10,height=10)
> h <- heatmap.2(x=n2,distfun=netDist,Rowv=p,Colv=p,col=col,symm=TRUE,
+ cexRow=0.5,cexCol=0.5,RowSideColors=rc,ColSideColors=cc,
+ revC=TRUE,dendrogram="row",trace="none")
> dev.off()

> cc <- c(rep("blue",27),rep("red",79))

> svg("PAJheat2.svg",width=10,height=10)
> h <- heatmap.2(x=n2,distfun=netDist,Rowv=p,Colv=p,col=col,symm=TRUE,
+ colsep=c(20,40,50),rowsep=c(6,14,18,25,30,36,42,47), 
+ sepcolor="blue",sepwidth=c(0.01,0.01),
+ cexRow=0.5,cexCol=0.5,RowSideColors=rc,ColSideColors=cc,
+ revC=TRUE,dendrogram="row",trace="none")
> dev.off()
> D <- netDist(n2)
> hc <- hclust(D)
> plot(hc,hang=-1,cex=0.2)
> C <- cutree(hc,k=15)
> dend <- as.dendrogram(hc)
> hm <- heatmap.2(n2,Rowv=dend,col=col,symm=TRUE,cexRow=0.3,cexCol=0.3,revC=TRUE,trace="none")
> P <- C[hm$rowInd]
> Q <- c()
> for(i in 1:105) if(P[i]!=P[i+1]) Q <- c(Q,i)
> hm <- heatmap.2(n2,Rowv=dend,col=col,symm=TRUE,
+ ColSideColors=cc,cexRow=0.3,cexCol=0.3,# keysize=30,
+ colsep=Q,rowsep=Q,sepcolor="blue",sepwidth=c(0.01,0.01),
+ main="Collaboration among Russian SNA", 
+ key=FALSE,dendrogram="row",revC=TRUE,trace="none")

Structural equivalence

> setwd("C:/Users/batagelj/Documents/2017/rusija/daria")
> library(gplots)
> library(xml2)

> xml2utf8 <- function(str){
+   t <- xml2::xml_text(xml2::read_xml(paste0("<x>", str, "</x>")))
+   Encoding(t) <- "UTF-8"
+   return (t)
+ }
> netDist <- function(A){ n <- nrow(A)
+   D <- matrix(nrow=n,ncol=n,dimnames=dimnames(A)); diag(D) <- 0
+   for(v in 2:n){
+     for(u in 1:(v-1)) {
+       d <- sum((A[v,]-A[u,])**2) - (A[v,u]-A[u,u])**2 - (A[v,v]-A[u,v])**2 +
+            (A[v,u]-A[u,v])**2 + (A[v,v]-A[u,u])**2 
+       D[v,u] <- D[u,v] <- sqrt(d)
+     } 
+   }
+   return(as.dist(D)) 
+ }

> # load("W.Rdata")
> N <- unlist(lapply(rownames(n2),xml2utf8))
> rownames(n2) <- N; colnames(n2) <- N
> n <- length(N)
> cc <- c(rep("blue",27),rep("red",79))
> col<- colorRampPalette(c("white", "black"))(4)
> D <- netDist(n2)
> hc <- hclust(D)
> plot(hc,hang=-1,cex=0.2)

> C <- cutree(hc,k=15)
> dend <- as.dendrogram(hc)
> hm <- heatmap.2(n2,Rowv=dend,col=col,symm=TRUE,cexRow=0.3,cexCol=0.3,revC=TRUE,trace="none")

> P <- C[hm$rowInd]
> Q <- c()
> for(i in 1:(n-1)) if(P[i]!=P[i+1]) Q <- c(Q,i)
> hm <- heatmap.2(n2,Rowv=dend,col=col,symm=TRUE,
+ ColSideColors=cc,cexRow=0.3,cexCol=0.3,
+ colsep=Q,rowsep=Q,sepcolor="blue",sepwidth=c(0.01,0.01),
+ main="Collaboration among Russian SNA", 
+ key=FALSE,dendrogram="row",revC=TRUE,trace="none")
>

> svg("PAJheat2.svg",width=14,height=14)
> hm <- heatmap.2(n2,Rowv=dend,col=col,symm=TRUE,
+ ColSideColors=cc,cexRow=0.65,cexCol=0.65,
+ colsep=Q,rowsep=Q,sepcolor="blue",sepwidth=c(0.01,0.01),
+ main="Collaboration among Russian SNA", 
+ key=FALSE,dendrogram="row",revC=TRUE,trace="none")
> dev.off()

> col = c("khaki1","khaki3","khaki4","black")
> hm <- heatmap.2(n2,Rowv=dend,col=col,symm=TRUE,
+ ColSideColors=cc,cexRow=0.3,cexCol=0.3,
+ colsep=Q,rowsep=Q,sepcolor="blue",sepwidth=c(0.01,0.01),
+ main="Collaboration among Russian SNA", 
+ key=FALSE,dendrogram="row",revC=TRUE,trace="none")

> svg("PAJheat2b.svg",width=14,height=14)
> hm <- heatmap.2(n2,Rowv=dend,col=col,symm=TRUE,
+ ColSideColors=cc,cexRow=0.85,cexCol=0.85,
+ colsep=Q,rowsep=Q,sepcolor="blue",sepwidth=c(0.01,0.01),
+ lwid=c(0.5,4),lhei=c(0.5,4),margins=c(8,8),
+ key=FALSE,dendrogram="row",revC=TRUE,trace="none")
> dev.off()

pajheat2.pdf pajheat2k.pdf pajheat2b.pdf

URLs

  1. Drawing heatmaps in R, June 24, 2011
  2. Sebastian Raschka: A short tutorial for decent heat maps in R, Dec 8, 2013
  3. Dave Tang: Making a heatmap with R, Dec 6, 2010
  4. J. HARRY CAUFIELD: Heatmaps in R, two ways, March 2, 2016
  5. heatmap.2, from gplots v3.0.1
  6. A. Bailey: A short R heatmap tutorial, 29 July 2015
  7. Jeremy Yoder: Making heatmaps with R for microbiome analysis, 20 August, 2013 by
  8. Shilin Zhao: Introduction for heatmap3 package, April 6, 2015
  9. Markus Gesmann: Using SVG graphics in blog posts, February 9, 2016
  10. Stack Overflow: How to easily visualize a matrix?, May 2011
  11. Matthew Lincoln: Adjacency matrix plots with R and ggplot2, 20 Dec 2014
notes/net/rmat.txt · Last modified: 2017/07/26 23:13 by vlado
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki