Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Measure "ink" of a plot

I am reading on Tufte's data-ink ratio and I was wondering if it is possible to measure the amount of "ink" a plot uses?

If not possible in R perhaps with another tool such as GIMP or imagemagick?

like image 989
ECII Avatar asked Jan 12 '14 10:01

ECII


1 Answers

I'd suggest using grid.cap() to convert the contents of the graphics device to a raster, after which it's a simple matter to compute the proportion of non-white pixels (aka "ink"). In the following example, to focus the computations on ink in the plotting area, I've set par(mar=c(0,0,0,0)), but you can drop that line if you want to also examine the amount of ink in the axes, ticks, axis labels, title, etc.

library(grid)

## Plot to R's default graphical device
opar <- par(mar=c(0,0,0,0))
plot(rnorm(1e4), rnorm(1e4), pch=16) 

## Capture contents of the graphics device as a raster (bitmap) image
p <- grid.cap()

## Compute the proportion of pixels that are not white (i.e. are inked in)
sum(p!="white")/length(p)
# [1] 0.2414888

## Restore pre-existing graphical parameters
par(opar)                    
like image 169
Josh O'Brien Avatar answered Oct 09 '22 17:10

Josh O'Brien