使用geom_abline()和ggplot

wat*_*wer 9 r ggplot2

我是初学者ggplot2- 自从我开始尝试它以来只有4天了.所以,如果这个问题听起来太基本,我道歉.我很感激任何指导 - 我一直在努力解决这个问题大约一个小时.

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

 p <- ggplot(mpg, aes(cty, hwy)) + geom_point()
 p + geom_abline() + facet_wrap(~cyl)
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

  p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
     p + geom_abline() + facet_wrap(~cyl)
Run Code Online (Sandbox Code Playgroud)

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

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

这是我没有任何abline()s 的图表在此输入图像描述

我很感激任何想法.我真的很困惑.

cut*_*h44 10

如果您不提供任何参数,请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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述在此输入图像描述


Cyr*_*ian 5

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

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

它实际上取决于您的美学中抛出的两个变量的比例(即您的两个映射变量)。如果您在绘制mpg数据的脚本中仔细注意到,您正在hwycity. 让我们更仔细地检查每一个:

range(mpg$hwy)
[1] 12 44
range(mpg$cty)
[1]  9 35
Run Code Online (Sandbox Code Playgroud)

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

range(mtcars$mpg)
[1] 10.4 33.9
range(mtcars$wt)
[1] 1.513 5.424
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

现在让我们使用范围内但从mtcars数据集中提取的数据来测试范围的概念,以显示其不是数据集而是选择映射的变量的重叠范围。在mtcars让棍子mpg,然后从中挑选它的范围-如何回合内另一个变量qsec?让我们检查它们的范围:

range(mtcars$mpg)
[1] 10.4 33.9
range(mtcars$qsec)
[1] 14.5 22.9
Run Code Online (Sandbox Code Playgroud)

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

p <- ggplot(mtcars, aes(qsec, mpg)) + geom_point() + geom_abline() + facet_wrap(~cyl)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

一些额外的确认它不依赖于数据集。让我们颠倒我们的工作流程,而是识别mpg数据集中的非重叠对。在这里,我们应该期望看不到 abline。让我们坚持hwy并比较它displ。相信我的话,它们不会重叠:

ggplot(mpg, aes(displ, hwy)) + geom_point()+geom_abline() + facet_wrap(~cyl)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

正如其他人指出的那样(@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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明