【问题标题】:How to avoid overplotting (for points) using base-graph?如何避免使用基图过度绘制(对于点)?
【发布时间】:2011-04-04 19:14:46
【问题描述】:

我正在为一篇论文完成图表并决定 (after a discussion on stats.stackoverflow),为了传输尽可能多的信息,创建以下图表,在前台和后台显示原始数据:

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

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


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

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

【问题讨论】:

    标签: r graphics plot points


    【解决方案1】:

    标准方法是在绘图前向数据添加一些噪声。 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))
    

    【讨论】:

    • 我通过编写一个小函数稍微扩展了这种方法,该函数只是向副本添加了抖动(即均匀噪声)。现在我很开心。
    【解决方案2】:

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

    【讨论】:

    • 从未想过在这种情况下使用 alpha 混合,好主意。您可以将两者结合起来,因此您仍然可以看到各个点: plot(jitter(as.numeric(Z),factor=0.2),X,xaxt="n",col=rgb(0, 0, 0, 0.5) )
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        • 1970-01-01
        • 2015-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多