R图:创建Tufte的水平条线

时间:2012-12-04 11:05:57

标签: r graph ggplot2

我们如何在R?

中复制Tufte隐含的水平线

Tufte bars

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

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

删除边框线应该很简单。关键点,水平线与条形重叠,我不清楚。

我想到两种方法:

  1. 此特定示例的临时解决方案
  2. 建议如何将其纳入主题

3 个答案:

答案 0 :(得分:18)

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

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

enter image description here

关于你的第二个问题 - 我想这可能很难融入一个主题,虽然应该可以创建一个自定义geom来读取y-scale中断并相应地绘制线条。

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

答案 1 :(得分:12)

@Andrie答案不是一个很大的补充,但你可以利用包ggthemes来制作带有ggplot2的Tufte-sque图。下面,我正在使用theme_tufte,使用extrafont包更改字体,并使用opts微调所有其他视觉功能:

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

答案 2 :(得分:3)

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

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