Hi!
The other day I asked a couple of questions about plotting some data.
Firstly I wanted to specify the colours used for the text plotted
using:> text(chem.predict[,1:2], labels = km$cluster)
Matt Wiener suggested:> col.vec <- c("black", "red", "blue")
> text(chem.predict[,1:2], labels = km$cluster, color col.vec[km$clusters])
Cheers Matt, that worked great.
Secondly I wanted to know how to plot just the loadings of a PCA as
biplot arrows, i.e. plot a biplot but without plotting the labels for
the scores.
I solved this by taking the biplot.default code and adding an option
pscores to the call. This is FALSE by default. I then put an if clause
before the bit of the code that plots the labels for the PCA scores, so
that they only get plotted if you specify pscores=TRUE. My function for
doing this is copied below, with a couple of extra modifications so that
I can get the plot as I required.
Cheers for the help, and for such an excellent piece of software. I'm a
R newbie and am constantly surprised how easy it is get R to do the
things you want to do with it.
Gav
my.biplot <- function (x, y, var.axes = TRUE, col, cex = c(1, 0.4),
xlabs = NULL, ylabs = NULL, expand = 1, xlim = NULL, ylim = NULL,
arrow.len = 0.1,
pscores = FALSE, xlab="", ylab="", ...)
{
labx <- xlab
laby <- ylab
n <- nrow(x)
p <- nrow(y)
if (missing(xlabs)) {
xlabs <- dimnames(x)[[1]]
if (is.null(xlabs))
xlabs <- 1:n
}
xlabs <- as.character(xlabs)
dimnames(x) <- list(xlabs, dimnames(x)[[2]])
if (missing(ylabs)) {
ylabs <- dimnames(y)[[1]]
if (is.null(ylabs))
ylabs <- paste("Var", 1:p)
}
ylabs <- as.character(ylabs)
dimnames(y) <- list(ylabs, dimnames(y)[[2]])
if (length(cex) == 1)
cex <- c(cex, cex)
if (missing(col)) {
col <- par("col")
if (!is.numeric(col))
col <- match(col, palette())
col <- c(col, col + 1)
}
else if (length(col) == 1)
col <- c(col, col)
unsigned.range <- function(x) c(-abs(min(x)), abs(max(x)))
rangx1 <- unsigned.range(x[, 1])
rangx2 <- unsigned.range(x[, 2])
rangy1 <- unsigned.range(y[, 1])
rangy2 <- unsigned.range(y[, 2])
if (missing(xlim) && missing(ylim))
xlim <- ylim <- rangx1 <- rangx2 <- range(rangx1, rangx2)
else if (missing(xlim))
xlim <- rangx1
else ylim <- rangx2
ratio <- max(rangy1/rangx1, rangy2/rangx2)/expand
on.exit(par(oldpar))
oldpar <- par(pty = "s")
plot(x, type = "n", xlim = xlim, ylim = ylim, col = col[1],
xlab=labx, ylab=laby, ...)
if (pscores)
text(x, xlabs, cex = cex[1], col = col[1], ...)
par(new = TRUE)
plot(y, axes = FALSE, type = "n", xlim = xlim * ratio, ylim = ylim
*
ratio, xlab = "", ylab = "", col = col[1], ...)
axis(3, col = col[2])
axis(4, col = col[2])
box(col = col[1])
text(y, labels = ylabs, cex = cex[2], col = col[2], ...)
if (var.axes)
arrows(0, 0, y[, 1] * 0.8, y[, 2] * 0.8, col = col[2],
length = arrow.len)
invisible()
}
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at
stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._