suppressPackageStartupMessages(require(ggplot2))
suppressPackageStartupMessages(require(reshape))

If you like this approach to correlation matrixes, you might also like the arm::corrplot function. Here's a ggplot2 implementation of correlation matrixes, using NBA statistics from Nathan Yau at Flowing Data as an example.

ggcorr <- function(data, method = "pairwise", palette = "RdYlGn") {

    M <- cor(data[1:ncol(data)], use = method)
    M <- M * lower.tri(M)
    M <- as.data.frame(M)
    M <- data.frame(row = names(data), M)
    M <- melt(M)
    M$value[M$value == 0] <- NA
    s <- seq(-1, 1, by = 0.25)
    M$value <- cut(M$value, breaks = s, include.lowest = TRUE, label = cut(s, 
        breaks = s)[-1])
    M$row <- factor(M$row, levels = (unique(as.character(M$variable))))
    diag <- subset(M, row == variable)

    po.nopanel <- list(theme(panel.background = element_blank(), panel.grid.minor = element_blank(), 
        panel.grid.major = element_blank(), axis.text.x = element_text(angle = -90)))

    ggplot(M, aes(row, variable)) + scale_fill_brewer(palette = palette, name = "Correlation\ncoefficient") + 
        geom_tile(aes(fill = value), colour = "white") + geom_text(data = diag, 
        aes(label = variable, hjust = 1), size = 4) + scale_x_discrete(breaks = NULL) + 
        scale_y_discrete(breaks = NULL) + labs(x = "", y = "") + po.nopanel
}

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
ggcorr(nba[-1])
## Using row as id variables

plot of chunk unnamed-chunk-2

~ François, March 2013