如何使用基础图形避免过度绘制(点)?

14

我正在为一篇论文制作图表,并决定(在stats.stackoverflow上的讨论后),为了尽可能传递更多信息,创建下面这个图表,前景中呈现平均值,背景中呈现原始数据:alt text

不过,现在遇到的一个问题就是重叠。比如,标记点似乎只反映了一个数据点,但实际上该位置存在5个相同值的数据点。
因此,我想知道是否有办法在使用points函数的base graph中处理重叠。
最理想的情况是,例如相应的点变得更暗,或更粗等等。

手动完成这项任务不是一个选项(太多的图和像这样的点)。此外,我也不想学习ggplot2来解决这个单一的问题(其中一个原因是我倾向于喜欢不支持ggplot2的双轴)。


更新: 我编写了一个函数,自动创建上述图形并通过添加垂直或水平抖动(或两者兼而有之)来避免重叠:查看!

此功能现在作为raw.means.plotraw.means.plot2plotrix软件包中提供(位于CRAN上)。

4个回答

14

标准方法是在绘图之前向数据添加一些噪音。R语言有一个名为jitter()的函数,正好可以实现这个功能。您可以使用它向您的绘图坐标中添加必要的噪音。例如:

X <- rep(1:10,10)
Z <- as.factor(sample(letters[1:10],100,replace=T))

plot(jitter(as.numeric(Z),factor=0.2),X,xaxt="n")
axis(1,at=1:10,labels=levels(Z))

我通过编写一个小函数来扩展这种方法,该函数只是向重复项添加抖动(即均匀噪声)。现在我很满意。 - Henrik

8
除了抖动之外,另一个好的方法是使用 alpha 混合,你可以在支持它的图形设备上获得第四个颜色参数。我在这个 Stack Overflow 问题中提供了一个“重叠绘图”两个直方图的示例。

从来没有想过在这种情况下使用alpha混合,太棒了。您可以将两者结合起来,以便仍然可以看到每个点:plot(jitter(as.numeric(Z),factor=0.2),X,xaxt="n",col=rgb(0, 0, 0, 0.5)) - Joris Meys

4

对于显示点数的一般问题,有一个额外的想法可以使用地毯图(rug function),它在边缘上放置小的刻度标记,可以显示贡献了多少个点(仍然使用抖动或透明混合进行并列)。这允许实际点显示其真实而不是抖动的值,但地毯可以指示哪些部分的图有更多的值。

对于示例图中,直接抖动或透明混合可能是最好的选择,但在某些其他情况下,地毯图可能是有用的。


3

您也可以使用sunflowerplot,但在这里实现可能会很困难。我会像Dirk建议的那样使用alpha-blending。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接