【问题标题】:How do I draw gridlines using abline() that are behind the data?如何使用数据后面的 abline() 绘制网格线?
【发布时间】:2013-11-19 21:33:41
【问题描述】:

当我使用abline() 在绘图上绘制网格线时,网格线会绘制在数据上。

有没有办法在数据后面绘制abline() 线?我觉得这样会更好看。

例子:

x <- seq(0, 10)
y <- x
plot(x, y, col = 'red', type = 'o', lwd = 3, pch = 15)
abline(h = seq(0, 10, .5), col = 'lightgray', lty = 3)
abline(v = seq(0, 10, .5), col = 'lightgray', lty = 3)

生成的绘图具有跨越数据的灰色网格线(红线)。我希望红线位于灰线之上。

【问题讨论】:

    标签: r plot


    【解决方案1】:

    plot()panel.first 参数可以采用函数列表或向量,因此您可以将 abline() 调用放入其中。

    plot(1:4, panel.first = 
           c(abline(h = 1:4, lty = 2, col = 'grey') 
            ,abline(v = 1:4, lty = 2, col = 'grey')))
    

    【讨论】:

    • 我很欣赏这个答案。我已经告诉过我将来会经常使用 panel.first。
    • 如何为箱线图做同样的事情?
    • 这应该是一个新问题,而不是评论。但是请参阅下面的方法,因为 boxplot 不依赖于绘图。
    【解决方案2】:

    使用plot() 设置绘图窗口,但使用type = "n" 不绘制任何数据。然后进行abline() 调用,或使用grid(),然后使用任何合适的低级函数绘制数据(这里points() 很好)。

    x <- seq(0, 10)
    y <- x
    plot(x, y, type = "n")
    abline(h = seq(0, 10, .5), col = 'lightgray', lty = 3)
    abline(v = seq(0, 10, .5), col = 'lightgray', lty = 3)
    points(x, y, col = 'red', type = 'o', lwd = 3, pch = 15)
    

    ## using `grid()`
    plot(x, y, type = "n")
    grid()
    points(x, y, col = 'red', type = 'o', lwd = 3, pch = 15)
    

    有关如何根据您的abline() 版本指定网格的详细信息,请参阅?grid

    【讨论】:

      【解决方案3】:

      首先用 type="n" 绘制以建立坐标。然后放入网格线,然后使用常规绘图类型再次绘图:

      plot(x, y, col = 'red', type = 'n', lwd = 3, pch = 15)
      abline(h = seq(0, 10, .5), col = 'lightgray', lty = 3)
      abline(v = seq(0, 10, .5), col = 'lightgray', lty = 3)
      par(new=TRUE)
      plot(x, y, col = 'red', type = 'o', lwd = 3, pch = 15)
      

      我承认我一直认为par 参数的名称是“向后”。

      【讨论】:

      • 向后,如果您使用 points() 绘制数据,则不需要。
      • 我没有意识到 points 中提供了 'type' 参数。
      • points() 没有必要。我认为 Gavin 是在暗示你会像你一样进行初始 type = 'n' plot() 调用,但然后只需将最后一行更改为 points( 而不是 plot(。然后 par() 调用就不需要了。顺便说一句, type 可以在点和线中使用,我相信我知道有时我想要两者,只是用 type = 'b' 调用lines()。
      • 我明白他的意思。我只是在解释为什么我没有对点和线使用两次调用。
      【解决方案4】:

      另一种创建网格线的方法是在绘图时或在axis 函数中设置tck=1(创建网格线后,您可能仍希望使用points 绘制点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-12
        • 2014-06-14
        • 2019-03-25
        • 2019-11-14
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多