How can we replicate Tufte's implicit horizontal lines in R?
For example, the following is a good starting point:
library(ggplot2)
ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw()
Removing the border line should be straightforward. The crucial point, overlaying the horizontal line with the bars, is unclear to me.
I imagine two approaches here:
In principle, this is straightforward - all you need to do is draw white horizontal lines in a new layer. You can use geom_hline
to do this:
library(ggplot2)
ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw() +
geom_hline(yintercept=seq(5, 20, 5), col="white")
As for your second question - I'd imagine this may be hard to incorporate in a theme, although it should be possible to create a custom geom that reads the y-scale breaks and plot the lines correspondingly.
(I'd love to be proved wrong.)
Not a big addition to @Andrie answer, but you can take an advantage of the package ggthemes
to make Tufte-sque plots with ggplot2
. Below, I'm using theme_tufte
, change the font using extrafont
package, and use opts
to fine-tune all the other visual features:
library(ggthemes)
library(extrafont)
ggplot(msleep, aes(x=order)) + stat_bin(width=0.6, fill="gray") +
theme_tufte(base_family="GillSans", base_size=16, ticks=F) +
theme(axis.line=element_blank(), axis.text.x=element_blank(),
axis.title=element_blank()) +
geom_hline(yintercept=seq(5, 20, 5), col="white", lwd=1.2)
There's also a pretty easy base R solution for this:
tmp <- table(msleep$order)
barplot(tmp, col='black', las=3)
abline(h=seq(5, max(tmp), by=5), col='white', lwd=2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With