knitr::opts_chunk$set( collapse = TRUE, comment = "#>", message = FALSE, warning = FALSE, dpi = 150, fig.align = "center", out.width = "80%" )
This is a gallery of finished figures — each with the code that produces it — for the kinds of
correlograms that show up in papers. For the argument-by-argument tour of every option, see
vignette("ggcorrplot").
Two facts make ggcorrplot well suited to publication work: it takes a correlation matrix you already have
(so it never gets between you and your statistics), and it returns a plain ggplot object, so any figure
here can be restyled, titled, and combined with +.
library(ggcorrplot) library(ggplot2) data(mtcars) corr <- round(cor(mtcars), 1) p.mat <- cor_pmat(mtcars)
The workhorse figure: reorder the variables by hierarchical clustering so correlated variables sit together and the block structure is visible, and draw thin white separators between cells.
ggcorrplot(corr, hc.order = TRUE, outline.color = "white")
For a symmetric matrix the two triangles are redundant, so a paper usually shows one, often with the coefficients printed in the cells — a figure that replaces a correlation table.
ggcorrplot(corr, hc.order = TRUE, type = "lower", lab = TRUE, lab_size = 3)
Supply the p-value matrix from cor_pmat() and choose how to convey significance. insig = "blank"
drops the non-significant cells; insig = "stars" instead marks the significant ones with
*/**/*** — a standalone significance map.
# non-significant cells left blank ggcorrplot(corr, hc.order = TRUE, type = "lower", p.mat = p.mat, insig = "blank") # significant cells starred ggcorrplot(corr, p.mat = p.mat, insig = "stars")
The default, insig = "pch", crosses out the non-significant cells with an X instead.
method = "circle" encodes the correlation with the circle's area, so strong correlations pop out — the
familiar corrplot look, drawn in ggplot2.
ggcorrplot(corr, method = "circle", hc.order = TRUE, type = "upper", outline.color = "white")
scale.square = TRUE sizes the squares by the absolute correlation, so magnitude is encoded by both area
and color at once — the classic corrplot square look. Near-zero cells shrink to small squares while the
strong correlations dominate, which reads well for large matrices and for colorblind viewers.
ggcorrplot(corr, scale.square = TRUE, hc.order = TRUE, outline.color = "white")
cell.grid = TRUE draws a light rectangle around every cell and drops the
gridlines that otherwise run through the glyph centers, so each sized glyph sits
inside its own box. Combined with scale.square = TRUE (or method = "circle")
this is the boxed-cell corrplot signature, drawn in ggplot2. It has no effect on
a plain full-tile square heatmap, whose cells already have a border.
# size-scaled squares in boxed cells ggcorrplot(corr, scale.square = TRUE, cell.grid = TRUE, hc.order = TRUE, outline.color = "white") # circles in boxed cells ggcorrplot(corr, method = "circle", cell.grid = TRUE, hc.order = TRUE)
preset = "publication" is a one-token beautiful default (white separators + the colorblind-safe RdBu
palette). For a specific journal look, set colors and ggtheme yourself.
# one-token publication preset ggcorrplot(corr, hc.order = TRUE, preset = "publication") # a custom diverging palette on a minimal theme ggcorrplot(corr, hc.order = TRUE, type = "lower", outline.color = "white", ggtheme = theme_minimal, colors = c("#6D9EC1", "white", "#E46726") )
A correlogram of solid colored squares with no cell border — the look used in many module–trait and
omics papers. method = "square" is a full-tile heatmap; outline.color = NA removes the border. Reverse
the default gradient to c("red", "white", "blue") for red-negative / blue-positive, and put the variable
names on top with a one-line scale.
ggcorrplot(corr, outline.color = NA, colors = c("red", "white", "blue"), legend.title = "Correlation" ) + scale_x_discrete(position = "top")
Correlations are not always a square symmetric matrix. To relate one set of variables to another — say
engine/size variables against performance variables — pass a rectangular correlation matrix. Clustering
and the triangle options need a square matrix, so use hc.order = FALSE.
rect <- round(cor( mtcars[, c("mpg", "hp", "wt", "qsec")], mtcars[, c("disp", "drat", "vs", "am", "gear")] ), 1) ggcorrplot(rect, hc.order = FALSE, lab = TRUE, outline.color = "white")
Because ggcorrplot() returns a ggplot object, anything ggplot2 can do is available. Start from any
correlogram and add a title, a clearer legend label, and theme tweaks; then save at print resolution.
The legend label is a ggcorrplot argument (legend.title); the title, subtitle and theme come from ggplot2.
p <- ggcorrplot(corr, hc.order = TRUE, type = "lower", outline.color = "white", legend.title = "Pearson r" ) + labs( title = "Correlations among car-design variables", subtitle = "mtcars, Pearson correlation" ) + theme(plot.title = element_text(face = "bold")) p
ggsave("correlogram.png", p, width = 7, height = 6, dpi = 300)
sessionInfo()
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.