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


89

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

在线研究了一段时间后,许多人建议我的数据库通常包含空值或缺少数据,事实并非如此。

在这个问题上,可接受的答案如下:

警告表示某些元素已删除,因为它们不在指定范围内

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


5
y这个问题的轴心是有限的。由于该功能,值限制在0到0.12之间:ylim(0,0.12)
LyzandeR 2015年

1
一个可复制的示例将有助于回答这个问题。@LyzandeR似乎走的正确。
vpipkt

Answers:


84

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

library(ggplot2)

# All points are visible in the plot
ggplot(mtcars, aes(mpg, hp)) + 
  geom_point()

在下面的代码中,hp = 335的一个点在图的y范围之外。另外,由于我们曾经scale_y_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")

11

只为完成eipi10给出的答案即可。

我没有使用scale_y_continuousnor也面临着同样的问题coord_cartesian

冲突来自我定义的x轴limits = c(1, 30)。如果您想“避开”杠,似乎这样的限制不能提供足够的空间,因此R仍然会引发错误

删除了包含缺失值的8行(geom_bar)

调整x轴的极限以limits = c(0, 31)解决该问题。

总之,即使您没有对y轴设置限制,也请检查x轴行为以确保有足够的空间


这经常被遗漏。由同一个人。一段时间后再次...叹息谢谢!
Genom

1

即使您的数据落在指定的限制内(例如c(0, 335)),添加一条geom_jitter()语句也可能会使某些限制超出这些限制,从而产生相同的错误消息。

library(ggplot2)

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

# No jitter -- no error message
ggplot(mtcars, aes(mpg, hp)) + 
    geom_point() +
    scale_y_continuous(limits=c(0,335))


# Jitter is too large -- this generates the error message
ggplot(mtcars, aes(mpg, hp)) + 
    geom_point() +
    geom_jitter(position = position_jitter(w = 0.2, h = 0.2)) +
    scale_y_continuous(limits=c(0,335))
#> Warning: Removed 1 rows containing missing values (geom_point).

reprex软件包(v0.3.0)创建于2020-08-24


0

我也遇到了这个问题,但是在我想要避免额外的错误消息的同时保持提供的范围的情况下。还可以选择在设置范围之前对数据进行子集设置,以便可以在不触发警告的情况下保留范围,但是您可以随意设置。

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))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.