[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