20

我们如何在 R 中复制 Tufte 的隐式水平线?

簇绒棒

例如,以下是一个很好的起点:

library(ggplot2)    
ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw()

删除边界线应该很简单。关键点,用条覆盖水平线,我不清楚。

我在这里想象两种方法:

  1. 此特定示例的临时解决方案
  2. 建议如何将其合并到主题中
4

3 回答 3

18

原则上,这很简单——您需要做的就是在新图层中绘制白色水平线。您可以使用它geom_hline来执行此操作:

library(ggplot2)    
ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw() +
  geom_hline(yintercept=seq(5, 20, 5), col="white")

在此处输入图像描述

至于你的第二个问题 - 我想这可能很难融入主题,尽管应该可以创建一个自定义几何图形来读取 y 比例中断并相应地绘制线条。

(我很想被证明是错误的。)

于 2012-12-04T11:10:22.113 回答
12

对@Andrie 答案的补充不是很大,但您可以利用该软件包ggthemes制作带有ggplot2. 下面,我正在使用,使用包theme_tufte更改字体,并用于微调所有其他视觉功能:extrafontopts

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)

在此处输入图像描述

于 2013-03-24T13:17:21.850 回答
3

还有一个非常简单的基本 R 解决方案:

tmp <- table(msleep$order)
barplot(tmp, col='black', las=3)
abline(h=seq(5, max(tmp), by=5), col='white', lwd=2)

在此处输入图像描述

于 2013-10-26T18:44:09.440 回答