[R] low level plotting question on R

Roland Rau roland.rproject at gmail.com
Fri Dec 7 18:33:43 CET 2007


Hi Jack,

Jack Luo wrote:
> Dear List,
> 
> I am trying to modify the xlab and ylab for a current figure that was
> plotted by a package, I searched through the low level plotting command and
> they do not seem to contain how to do this (the only way is to use xlab,
> ylab as arguments in "plot" command, which I can not do since the plot is
> plotted using some other package, not by my own script). Is there any
> command for doing this? In addition, the package is from CRAN (named Pamr),
> is there any way that I can modify the function used in the package?

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")



More information about the R-help mailing list