R graphs: Creating Tufte's horizontal bar lines

前端 未结 3 670
礼貌的吻别
礼貌的吻别 2020-12-14 02:39

How can we replicate Tufte\'s implicit horizontal lines in R?

\"Tufte

For example, the following

相关标签:
3条回答
  • 2020-12-14 03:22

    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)
    

    enter image description here

    0 讨论(0)
  • 2020-12-14 03:25

    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")
    

    enter image description here

    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.)

    0 讨论(0)
  • 2020-12-14 03:33

    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)
    

    enter image description here

    0 讨论(0)
提交回复
热议问题