我是初学者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()
我很感激任何想法.我真的很困惑.
cut*_*h44 10
如果您不提供任何参数,请geom_abline()使用默认值,intercept = 0和slope = 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)
第一个图和第二个图之间的差异,就 abline 的存在而言,不是由数据集的差异决定的。你问:
我如何知道在特定数据集中 abline() 是否会超出范围?
它实际上取决于您的美学中抛出的两个变量的比例(即您的两个映射变量)。如果您在绘制mpg数据的脚本中仔细注意到,您正在hwy与city. 让我们更仔细地检查每一个:
range(mpg$hwy)
[1] 12 44
range(mpg$cty)
[1] 9 35
Run Code Online (Sandbox Code Playgroud)
如您所见,变量的范围有相当多的重叠。现在让我们看看使用mtcars数据映射在第二个图中的两个变量-mpg和wt:
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)