14

我正在完成一篇论文的图表并决定(在讨论 stats.stackoverflow 之后),为了传输尽可能多的信息,创建以下图表,在前台和在背景原始数据: 替代文字

但是,仍然存在一个问题,那就是过度绘图。例如,标记点看起来像是反映了一个数据点,但实际上在该位置存在 5 个具有相同值的数据点。
因此,我想知道在base graph使用points函数时是否有办法处理过度绘图。
如果例如,各个点变得更暗,或更厚,或者......

手动执行它不是一种选择(这样的图表和点太多)。此外,ggplot2也不是我想学习处理这个单一问题(一个原因是我倾向于喜欢双轴不支持的东西ggplot2)。


更新:我编写了一个函数,它可以自动创建上述图表,并通过添加垂直或水平抖动(或两者)来避免过度绘制:检查一下!

此功能现在可作为包使用(在CRAN 上)raw.means.plotraw.means.plot2plotrix

4

4 回答 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))
于 2010-08-27T13:04:15.413 回答
8

除了抖动,另一种好方法是 alpha 混合,您可以获得(在支持它的图形设备上)作为第四个颜色参数。我在这个 SO question中提供了一个“过度绘制”两个直方图的示例。

于 2010-08-27T13:26:17.183 回答
4

显示点数的一般问题的另一个想法是使用地毯图(地毯函数),这会在边缘放置小刻度线,可以显示有多少点有贡献(仍然使用抖动或 alpha 混合来表示领带)。这允许实际点显示它们的真实值而不是抖动值,但是地毯可以指示绘图的哪些部分具有更多值。

对于示例图,直接抖动或 alpha 混合可能是最好的,但在其他一些情况下,地毯图可能很有用。

于 2010-08-27T15:20:32.090 回答
3

您也可以使用sunflowerplot,但在这里很难实现。正如 Dirk 建议的那样,我会使用 alpha 混合。

于 2010-08-27T13:31:43.583 回答