User:Timothee Flutre/Notebook/Postdoc/2011/11/09: Difference between revisions

From OpenWetWare
Jump to navigationJump to search
(→‎Entry title: replace rownames with mapping when different order)
(→‎Entry title: add custom heatmap)
(3 intermediate revisions by the same user not shown)
Line 15: Line 15:
  new.rownames <- unlist(lapply(rownames(mat), function(i){links$id2[which(links$id1 == i)]}))
  new.rownames <- unlist(lapply(rownames(mat), function(i){links$id2[which(links$id1 == i)]}))
  rownames(mat) <- new.rownames
  rownames(mat) <- new.rownames
Or it's maybe easier with the built-in [http://stat.ethz.ch/R-manual/R-patched/library/base/html/match.html match] function:
new.rownames <- links$id2[ match(rownames(mat), links$id1) ]
* in R, visualize the missing values (encoded as "NA") in a matrix:
image(1:nrow(mat), 1:ncol(mat), is.na(mat), col=c("white","black"),
      main="Missing values", xlab="Genes", ylab="Samples")
[[Image:Visualize_missing_values_in_matrix.png|400px]]
* in R, customize the built-in heatmap (inspired from [http://stackoverflow.com/questions/5687891/r-how-do-i-display-clustered-matrix-heatmap-similar-color-patterns-are-grouped/5694349 this]):
S <- 3  # nb of subgroups
V <- 7  # nb of observations
z <- matrix(c(0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,0,0), nrow=V, ncol=S, byrow=TRUE)
myheatmap <- function(z, out.file="") {
  def.par <- par(no.readonly=TRUE)
  par(mar=c(4,5,3,2), font=2, font.axis=2, font.lab=2, cex=1.5, lwd=2)
  if (out.file != "")
    pdf(out.file)
  layout(mat=cbind(1, 2), width=c(7,1))  # plot +  legend
  mycol <- rev(heat.colors(4))
  image(x=1:NCOL(z), y=1:NROW(z), z=t(z),
        xlim=0.5+c(0,NCOL(z)), ylim=0.5+c(0,NROW(z)),
        xlab="", ylab="Observations sorted by cluster", main="Custom heatmap",
        axes=FALSE, col=mycol)
  axis(1, 1:NCOL(z), labels=paste("subgroup", 1:NCOL(z)), tick=0)
  par(mar=c(0,0,0,0))
  plot.new()
  legend("center", legend=sprintf("%.2f", seq(from=min(z), to=max(z), length.out=5)[-1]),
          fill=mycol, border=mycol, bty="n")
  if (out.file != "")
    dev.off()
  par(def.par)
  }
myheatmap(mydata.sort)


<!-- ##### DO NOT edit below this line unless you know what you are doing. ##### -->
<!-- ##### DO NOT edit below this line unless you know what you are doing. ##### -->

Revision as of 09:24, 22 May 2014

Project name <html><img src="/images/9/94/Report.png" border="0" /></html> Main project page
<html><img src="/images/c/c3/Resultset_previous.png" border="0" /></html>Previous entry<html>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</html>Next entry<html><img src="/images/5/5c/Resultset_next.png" border="0" /></html>

Entry title

  • in R, replace the row names of a matrix by their new names when the order is different (but assuming one-to-one mapping):
links <- data.frame(id1=c("a","b","c"), id2=c("1","2","3"), stringsAsFactors=FALSE)
mat <- matrix(runif(3*10), nrow=3)
rownames(mat) <- c("b","c","a")
new.rownames <- unlist(lapply(rownames(mat), function(i){links$id2[which(links$id1 == i)]}))
rownames(mat) <- new.rownames

Or it's maybe easier with the built-in match function:

new.rownames <- links$id2[ match(rownames(mat), links$id1) ]


  • in R, visualize the missing values (encoded as "NA") in a matrix:
image(1:nrow(mat), 1:ncol(mat), is.na(mat), col=c("white","black"),
      main="Missing values", xlab="Genes", ylab="Samples")


  • in R, customize the built-in heatmap (inspired from this):
S <- 3  # nb of subgroups
V <- 7  # nb of observations
z <- matrix(c(0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,0,0), nrow=V, ncol=S, byrow=TRUE)

myheatmap <- function(z, out.file="") {
  def.par <- par(no.readonly=TRUE)
  par(mar=c(4,5,3,2), font=2, font.axis=2, font.lab=2, cex=1.5, lwd=2)
  if (out.file != "")
    pdf(out.file)
  layout(mat=cbind(1, 2), width=c(7,1))  # plot +  legend
  mycol <- rev(heat.colors(4))
  image(x=1:NCOL(z), y=1:NROW(z), z=t(z),
        xlim=0.5+c(0,NCOL(z)), ylim=0.5+c(0,NROW(z)),
        xlab="", ylab="Observations sorted by cluster", main="Custom heatmap",
        axes=FALSE, col=mycol)
  axis(1, 1:NCOL(z), labels=paste("subgroup", 1:NCOL(z)), tick=0)
  par(mar=c(0,0,0,0))
  plot.new()
  legend("center", legend=sprintf("%.2f", seq(from=min(z), to=max(z), length.out=5)[-1]),
         fill=mycol, border=mycol, bty="n")
  if (out.file != "")
    dev.off()
  par(def.par)
 }

myheatmap(mydata.sort)