I am creating a levelplot figure with the following code. This should be 
repeatable code, which includes a link to the data I am working with.

---------------------------
pdfFn <- "foo.pdf"
df <- 
read.table("http://dl.dropbox.com/u/31495717/stackoverflow.overlaps.list.txt";, 
sep="\t", header=FALSE)
names(df) <- c("x", "y", "level")
df$level <- round(df$level*100, 0)

# reorder cell type row-factors (in reverse of given order)
df$y <- factor(df$y, levels=unique(df$y[length(df$y):1]))

lowestValue <- min(df$level)
secondHighestValue <- unique(sort(df$level, decreasing=TRUE))[2]

numberOfColorBins <- 10
col.seq <- seq(lowestValue, secondHighestValue, length.out=numberOfColorBins)
brks <- c(0, col.seq, Inf)
cuts <- cut(df$level, breaks=brks)
colors <- colorRampPalette(c("white", "red"))(length(levels(cuts))-1)
colors <- c(colors, "black")

cls <- rep(colors, times=table(cuts))

library(lattice)
trellis.device(dev=pdf, file=pdfFn)
fig <- levelplot(cuts~x*y,
                 data=df,
                 cuts=numberOfColorBins,
                 col.regions=cls,
                 xlab="",
                 ylab="",
                 aspect="iso",
                 scales=list(
                   x=list(rot=90)
                   ),
                 panel=function(...) {
                   arg <- list(...)
                   panel.levelplot(...)
                   panel.text(df$x, df$y, df$level, cex=0.5)
                 },
                 colorkey=list(col=colorRampPalette(c("white", 
"red"))(length(col.seq)), at=col.seq)
                 )
print(fig)
graphics.off()
---------------------------

For reference, here is what the graph ("foo.pdf") looks like:

* http://twitpic.com/7z9u2c

Please note, in this example, the diagonal of black cells (representing cells 
with a level of "100").

The variable 'numberOfColorBins' defines the number of gradients between white 
and red, for values between the minimum level, and the second-highest level.

If I adjust the variable 'numberOfColorBins' from the current 10 to some value 
16 or greater, then the diagonal of black cells (values of "100") turns into a 
diagonal of red cells. 

Because I define red cells as between (in this example) the minimum of "14" and 
the second-highest maximum "79", values of "100" should always be black. 

My question is:

If I have 16 or more color bins between white and red, inclusive, then cells 
that were colored black are now colored red, which is incorrect. How can I 
increase the number of color bins between white and red, while keeping black 
cells black?

Thanks for any advice.

Regards,
Alex
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to