R 解释ggplot2警告:“;删除了包含缺失值的k行;

R 解释ggplot2警告:“;删除了包含缺失值的k行;,r,ggplot2,R,Ggplot2,当我试图使用ggplot生成绘图时,我收到此警告 在网上研究了一段时间后,许多人建议我的数据库包含空值或一般缺失的数据,但事实并非如此 公认的答案如下: 警告意味着某些图元由于超出指定范围而被删除 我想知道这个范围到底指的是什么,人们如何手动增加这个范围以避免所有警告?您看到的行为是由于ggplot2如何处理绘图轴范围之外的数据。您可以根据是使用scale\u y\u continuous(或者等效地使用ylim)还是coord\u cartesian来设置轴范围来更改此行为,如下所述 libr

当我试图使用
ggplot
生成绘图时,我收到此警告

在网上研究了一段时间后,许多人建议我的数据库包含空值或一般缺失的数据,但事实并非如此

公认的答案如下:

警告意味着某些图元由于超出指定范围而被删除


我想知道这个范围到底指的是什么,人们如何手动增加这个范围以避免所有警告?

您看到的行为是由于
ggplot2
如何处理绘图轴范围之外的数据。您可以根据是使用
scale\u y\u continuous
(或者等效地使用
ylim
)还是
coord\u cartesian
来设置轴范围来更改此行为,如下所述

library(ggplot2)

# All points are visible in the plot
ggplot(mtcars, aes(mpg, hp)) + 
  geom_point()
在下面的代码中,hp=335的一个点位于绘图的y范围之外。此外,由于我们使用了
scale\u y\u continuous
来设置y轴范围,因此该点不包括在由ggplot计算的任何其他统计或汇总度量中,例如线性回归线

ggplot(mtcars, aes(mpg, hp)) + 
  geom_point() +
  scale_y_continuous(limits=c(0,300)) +  # Change this to limits=c(0,335) and the warning disappars
  geom_smooth(method="lm")

Warning messages:
1: Removed 1 rows containing missing values (stat_smooth). 
2: Removed 1 rows containing missing values (geom_point).
在下面的代码中,hp=335的点仍在绘图的y范围之外,但该点仍包含在ggplot计算的任何统计或汇总度量中,如线性回归线。这是因为我们使用了
coord_cartesian
来设置y轴范围,并且该函数在对数据进行其他计算时不排除绘图范围之外的点

如果将此曲线图与上一个曲线图进行比较,可以看到第二个曲线图中的线性回归线具有稍陡的坡度,因为计算回归线时会包括hp=335的点,即使它在曲线图中不可见

ggplot(mtcars, aes(mpg, hp)) + 
  geom_point() +
  coord_cartesian(ylim=c(0,300)) +
  geom_smooth(method="lm")

只是为了完成eipi10给出的答案

我面临着同样的问题,没有使用
scale\u y\u continuous
coord\u cartesian

冲突来自x轴,我在x轴上定义了
limits=c(1,30)
。如果你想“闪避”你的酒吧,这样的限制似乎不能提供足够的空间,所以R仍然会抛出错误

删除了包含缺失值的8行(几何图形栏)

将x轴的限制调整为
限制=c(0,31)
解决了问题


总之,即使您没有对y轴设置限制,也要检查x轴的行为,以确保您有足够的空间,即使您的数据在指定的限制范围内(例如
c(0335)
),添加
geom_jitter()
语句可能会将某些点推到这些限制之外,生成相同的错误消息

库(ggplot2)
范围(mtcars$hp)
#> [1]  52 335
#没有抖动——没有错误消息
ggplot(mtcars、aes(mpg、hp))+
几何点()+
刻度连续(限值=c(0335))
#抖动太大--这将生成错误消息
ggplot(mtcars、aes(mpg、hp))+
几何点()+
几何抖动(位置=位置抖动(w=0.2,h=0.2))+
刻度连续(限值=c(0335))
#>警告:已删除1行,其中包含缺少的值(几何点)。

由(v0.3.0)于2020-08-24创建,我也遇到了这个问题,但我希望在保持提供的范围的同时避免额外的错误消息。还有一个选项是在设置范围之前对数据进行子集设置,以便在不触发警告的情况下,按照您的喜好保留范围

library(ggplot2)

range(mtcars$hp)
#> [1]  52 335

# Setting limits with scale_y_continous (or ylim) and subsetting accordingly
## avoid warning messages about removing data
ggplot(data= subset(mtcars, hp<=300 & hp >= 100), aes(mpg, hp)) + 
  geom_point() +
  scale_y_continuous(limits=c(100,300))
库(ggplot2)
范围(mtcars$hp)
#> [1]  52 335
#使用scale_y_continuous(或ylim)设置限制并相应地进行子集设置
##避免有关删除数据的警告消息
ggplot(数据=子集(mtcars,hp=100),aes(mpg,hp))+
几何点()+
连续刻度(限值=c(100300))

该问题在
y
轴上有一个限制。由于此函数,值被限制在0和0.12之间:
ylim(0,0.12)
一个可复制的示例将有助于回答此问题@LyzandeR似乎走上了正确的道路。这是经常错过的。是同一个人干的。又过了一段时间。。。叹气,谢谢!