Skip to content

low level plotting question on R

3 messages · Jack Luo, Roland Rau

#
Hi Jack,
Jack Luo wrote:
I think it would be useful if you are a bit more specific by telling us 
which function you were using.
I assume now that you used
library(pamr)
pamr.geneplot(...)

Is this correct?
If you check the package description, you will see that you are allowed 
to make changes to the software (GPL 2.0).
Now, have a look at
pamr.geneplot

Pretty much in the end, you will find the plotting command. What I did 
now was to basically slightly modify the function by adding two 
arguments for the labels of the x-axis and the y-axis to the function 
definition. As you will see with the provided example, you can make your 
own labels for the x-axis and y-axis now.

I hope this helps,
Roland


pamr.geneplot.modif <- function(fit, data, threshold, xlabel="new xlab",
                                 ylabel="new ylab") {
   # Slightly modified function of pamr.geneplot from package pamr by
   # Trevor Hastie, Robert Tibshirani, Balasubramanian Narasimhan,
   # and Gilbert Chu
   require(pamr)
   par(pch = 1, col = 1)
   geneid <- data$geneid
   if (is.null(geneid)) {
     geneid <- as.character(1:nrow(data$x))
   }
   if (is.null(fit$newy)) {
     y <- factor(data$y[fit$sample.subset])
   }
   else {
     y <- factor(fit$newy[fit$sample.subset])
   }
   x <- data$x[fit$gene.subset, fit$sample.subset]
   geneid <- geneid[fit$gene.subset]
   nc <- length(unique(y))
   aa <- pamr.predict(fit, x, threshold = threshold, type = "nonzero")
   cen <- pamr.predict(fit, x, threshold = threshold, type = "cen")
   d <- (cen - fit$centroid.overall)[aa, ]/fit$sd[aa]
   oo <- order(-apply(abs(d), 1, max))
   aa <- aa[oo]
   ngenes <- length(aa)
   o <- order(y)
   xx <- x[aa, o]
   geneid <- geneid[aa]
   nc <- length(unique(y))
   nn <- c(0, cumsum(table(y)))
   nrow <- trunc(sqrt(ngenes)) + 1
   ncol <- trunc(sqrt(ngenes)) + 1
   if (nrow * (ncol - 1) >= ngenes) {
     ncol <- ncol - 1
   }
   par(mfrow = c(nrow, ncol))
   for (i in 1:ngenes) {
     plot(1:ncol(xx), xx[i, ], type = "n", xlab = xlabel,
          ylab = ylabel, axes = FALSE)
     box()
     axis(2)
     for (j in 1:nc) {
       j1 <- nn[j] + 1
       j2 <- nn[j] + table(y)[j]
       points(j1:j2, xx[i, j1:j2], col = j + 1)
     }
     title(main = as.character(geneid[i]))
     for (j in 1:(nc - 1)) {
       abline(v = cumsum(table(y))[j] + 0.5, lty = 2)
     }
     if (i == 1) {
       h <- c(0, table(y))
       for (j in 2:(nc + 1)) {
         text(sum(h[1:(j - 1)]) + 0.5 * h[j], max(xx[i,
                                                     ]), label = 
levels(y)[j - 1], col = j)
       }
     }
   }
   par(mfrow = c(1, 1))
}

library(pamr)
set.seed(120)
x <- matrix(rnorm(1000*20),ncol=20)
y <- sample(c(1:4),size=20,replace=TRUE)
mydata <- list(x=x,y=y)
mytrain <-   pamr.train(mydata)
pamr.geneplot.modif(mytrain, mydata, threshold=1.6, xlabel="Hello", 
ylabel="World")