The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

gghinton

Hinton diagrams for ggplot2.

A Hinton diagram visualises a numerical matrix. Each element is displayed as a square and where the square’s area is proportional to the absolute value of the element. Positive values are white, negative values are black, on a grey background. This simple clear perceptual mapping makes interpretation of the structure of the matrix easy.

pak::pkg_install("robin-foster-rf/gghinton")
# install.packages("gghinton")  # once on CRAN

library(gghinton)

m <- matrix(runif(10*10, -1, 1), nrow = 10)

matrix_to_hinton(m) |>
  ggplot(aes(x = col, y = row, weight = weight)) +
  geom_hinton() +
  scale_fill_hinton() +
  coord_fixed() +
  theme_hinton()

Why not a heatmap?

Heatmap Hinton diagram
Encodes magnitude via colour intensity via square area
Encodes sign requires diverging palette white vs black
Works for colourblind readers depends on palette yes
Near-zero values invisible colour invisible square
Works at a glance partially yes

Colour saturation is a notoriously unreliable channel for magnitude judgements. Square area is not: humans compare areas accurately, pre-attentively. When you care about how big and which sign, a Hinton diagram beats a heatmap.

Heatmaps are better when: you have large matrices (> ~50x50, where at typical plotting sizes you would only have a handful of pixels per element), continuous gradients matter more than individual entries, or values are all positive and the magnitude range is narrow.

Installation

#development version:
pak::pkg_install("robin-foster-rf/gghinton")

# install.packages("gghinton")  # from CRAN (once available)

Core functions

Function Purpose
geom_hinton() Draw a Hinton diagram as a ggplot2 layer
stat_hinton() The underlying stat_* (for advanced use)
scale_fill_hinton() White/black colour scale for signed data
theme_hinton() Clean theme: removes grid lines
matrix_to_hinton() Convert a matrix to a tidy data frame
as_hinton_df() Generic converter (matrix, data.frame, table)

Key aesthetics

aes(x = col,    # column position
    y = row,    # row position (row 1 of the matrix is at the top)
    weight = w) # the value: determines size and colour

The scale_by parameter

# Default: each facet panel normalised independently
geom_hinton(scale_by = "panel")

# Global: all panels share the same scale, allows cross-panel comparison
geom_hinton(scale_by = "global")

Use cases

Design

gghinton follows standard ggplot2 extension conventions:

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.