如何使用基图避免过度绘图(对于点)?

时间:2010-08-27 12:56:21

标签: r graphics plot points

我正在完成论文的图表并决定(after a discussion on stats.stackoverflow),以便传输尽可能多的信息,以创建下面的图表,在前景中呈现均值和原始数据的背景: alt text

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

,那将是理想的

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


更新我编写了一个自动创建上述图表的函数,并通过添加垂直或水平抖动(或两者)来避免过度绘图:check it out!

此功能现在raw.means.plotraw.means.plot2 plotrix包中提供(在CRAN上)。

4 个答案:

答案 0 :(得分: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))

答案 1 :(得分:8)

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

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