删除R图中的边界以实现Tufte轴


18

考虑下图:

x <- 1:100
y1 <- rnorm(100)
y2 <- rnorm(100)+100

par(mar=c(5,5,5,5))

plot(x,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-8,2),ylab="")
axis(side=2, at=c(-2,0,2))
mtext("red line", side = 2, line=2.5, at=0)

par(new=T)
plot(x,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(98,108), ylab="")
axis(side=4, at=c(98,100,102), labels=c("98%","100%","102%"))
mtext("blue line", side=4, line=2.5, at=100)

如何删除自动生成的边框并仅保留轴线以实现Tufte的样式?


5
例如,查看中的bty参数。您可以在调用中将此参数传递给。?parbty="n"plot
Glen_b-恢复莫妮卡

3
FWIW的图夫特走得更远:他展示了在某些情况下如何擦除轴的一部分本身会提供更多信息,从而有效地将每个轴转变为数据范围的可视显示。受此启发,我于1989年编写了软件,以制作包含该设计的小幅多幅图(在其他许多图法和比尔·克利夫兰小组的启发中),随后生成了数百万张这样的图形。当您必须在视觉上挖掘大量数据时,这些原理确实有效。
ub

@whuber实际上,您是否用地毯图代替了轴?
银鱼

2
@Silver绘制地毯图是一个单独的问题-我也这样做了。但是,即使没有地毯图,您也可以选择在何处停止并开始绘制每个轴。当最小启动它并且最大停止它时,您已经获得了每个边际数据分布的整个范围的直观表示。
ub

2
@whuber谢谢,我现在明白了您的意思-Tufte将此称为“范围框架”(并建议不仅在极值处停止行,还建议使用最终标签指示其值-他称为“带有范围标签的范围框架”)。对于希望参考的以后的读者来说,这来自于定量信息的可视化显示,第7章(“多功能图形元素”)。由于这是一个受到高度关注的线程,很高兴看到添加了一个插图(并给出了问题,一些R代码)“ Tufte的轴”的真正含义是什么。
银鱼

Answers:



5

这很简单,只需包含参数即可axes=FALSE。考虑:

x  <- 1:100
y1 <- rnorm(100)
y2 <- rnorm(100) + 100

windows()
  par(mar=c(5,5,5,5))
  plot(x, y1, pch=0, type="b", col="red", yaxt="n", ylim=c(-8,2), ylab="", axes=F)
  axis(side=2, at=c(-2,0,2))
  mtext("red line", side = 2, line=2.5, at=0)

  par(new=T)
  plot(x, y2, pch=1, type="b", col="blue", yaxt="n", ylim=c(98,108), ylab="", axes=F)
  axis(side=4, at=c(98,100,102), labels=c("98%","100%","102%"))
  mtext("blue line", side=4, line=2.5, at=100)

在此处输入图片说明

请注意,这对于直方图同样有效:

windows()
hist(y1, axes=F)

在此处输入图片说明


4

如果您使用

par(bty = 'n') 

在调用剧情之前,将其修复为动物园。它还可能在无法将其传递给plotting命令的各种情况下对其进行修复。

(在par()帮助中签出bty选项以获取该图的其他类型的帧)


0

我正在回答一个更普遍的问题,即不参考Tufte删除情节中的边界。

对于直方图,我没有发现btn ='n'摆脱了边界。

一种适用于直方图并且适用于所有图类型的解决方案是将边框的线型设置为不可见:lty =“ blank”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.