【问题标题】:Using geom_abline() and ggplot使用 geom_abline() 和 ggplot
【发布时间】:2016-08-29 01:01:40
【问题描述】:

我是ggplot2 的初学者——从我开始尝试它到现在只有 4 天。因此,如果这个问题听起来太基本,我深表歉意。如有任何指导,我将不胜感激 - 我已经为这个问题苦苦挣扎了大约一个小时。

我正在尝试使用geom_abline(),如下所示:

 p <- ggplot(mpg, aes(cty, hwy)) + geom_point()
 p + geom_abline() + facet_wrap(~cyl)

这就像我可以在所有四个多面图中看到一条参考线一样,如下所示:

后来,我使用另一个相关的数据集mtcars 来看看geom_abline() 发生了什么

  p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
     p + geom_abline() + facet_wrap(~cyl)

但是,当我运行这个命令时,我看不到geom_abline(). 非常令人惊讶的是,我在帮助文件中找到了类似版本的上述命令,它说“geom_abline() 超出范围"

虽然我知道“超出范围”是什么意思,但我如何知道在特定数据集中,abline() 是否会超出范围?我可以通过强制它使用特定的斜率和截距来覆盖它,但是我会认为这有点黑客行为——即看到输出后修改代码。有什么方法可以让我知道geom_abline()的幕后发生了什么

这是我得到的没有任何abline()s 的图表

如果有任何想法,我将不胜感激。我真的很困惑。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    如果您不提供任何参数,geom_abline() 将使用默认值 intercept = 0slope = 1

    ggplot(mpg, aes(cty, hwy)) + geom_point() + geom_abline() + lims(x = c(0,35), y = c(0,50))
    ggplot(mtcars, aes(wt, mpg)) + geom_point() + geom_abline() + lims(x = c(0,6), y = c(0,35))
    

    【讨论】:

      【解决方案2】:

      就 abline 的存在而言,第一个图和第二个图之间的差异不是由数据集的差异决定的。你问:

      我如何知道在特定数据集中,abline() 是否会超出 范围?

      它实际上取决于您的美学中抛出的两个变量的比例(即您的两个映射变量)。如果您在绘制mpg 数据的脚本中仔细注意到,您将hwycity 进行比较。让我们仔细研究一下:

      range(mpg$hwy)
      [1] 12 44
      range(mpg$cty)
      [1]  9 35
      

      如您所见,变量的范围重叠很多。现在让我们看看使用mtcars 数据-mpgwt 映射到第二个图中的两个变量:

      range(mtcars$mpg)
      [1] 10.4 33.9
      range(mtcars$wt)
      [1] 1.513 5.424
      

      在这里您可以看到 重叠,这就是为什么您在绘制如下图时看不到它:

      现在让我们使用范围内但从mtcars 数据集提取的数据来测试范围的概念,以便显示它不是数据集,而是选择映射的变量的重叠范围。在mtcars 中,让我们坚持使用mpg,然后在其范围内选择另一个变量-qsec 怎么样?让我们检查一下它们的范围:

      range(mtcars$mpg)
      [1] 10.4 33.9
      range(mtcars$qsec)
      [1] 14.5 22.9
      

      好的,那里肯定有一些重叠。让我们映射一下,看看会发生什么:

      p <- ggplot(mtcars, aes(qsec, mpg)) + geom_point() + geom_abline() + facet_wrap(~cyl)
      

      一些额外的确认它不依赖于数据集。让我们反转我们的工作流程,而是在mpg 数据集中识别非重叠对。在这里,我们应该期望看到没有下划线。让我们坚持使用hwy 并将其与displ 进行比较。相信我的话,它们不会重叠:

      ggplot(mpg, aes(displ, hwy)) + geom_point()+geom_abline() + facet_wrap(~cyl)
      

      正如其他人指出的 (@cuttlefish44),geom_abline() 默认截距为 0,斜率为 1)。

      尝试使用geom_smooth() 进行拟合线。

       p <- ggplot(mpg, aes(cty, hwy)) + geom_point()
       p + geom_smooth(method = "lm", se = FALSE) + facet_wrap(~cyl)
      

      【讨论】:

        【解决方案3】:

        查看geom_abline() 的帮助。有一个具有相同数据集的示例(不包括方面)表明:

        p + geom_abline() # Can't see it - outside the range of the data
        

        试试:

        p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
        p + geom_abline(intercept = 20) + facet_wrap(~cyl)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-19
          • 2020-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多