我正在完成论文的图表并决定(after a discussion on stats.stackoverflow),以便传输尽可能多的信息,以创建下面的图表,在前景中呈现均值和原始数据的背景:
然而,一个问题仍然存在,那就是过度绘图。例如,标记点看起来像是反映了一个数据点,但实际上在该位置存在5个相同值的数据点。
因此,我想知道是否有办法使用base graph
作为函数来处理points
中的过度绘图。
如果例如各个点变暗或变厚,或者......
手动执行此操作不是一种选择(图表和点数太多)。此外,ggplot2
也不是我想学习处理这个单一问题的原因(一个原因是我倾向于喜欢ggplot2
中不支持的双轴。)
更新我编写了一个自动创建上述图表的函数,并通过添加垂直或水平抖动(或两者)来避免过度绘图:check it out!
此功能现在raw.means.plot
和raw.means.plot2
plotrix
包中提供(在CRAN上)。
答案 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建议的那样。