当我尝试使用ggplot
生成图时,收到此警告。
在网上研究了一段时间后,许多人认为我的数据库通常包含空值或缺失数据,但事实并非如此。
In this question接受的答案如下:
该警告意味着某些元素由于超出指定范围而被移除
我想知道这个范围到底指的是什么,怎么才能有人手动增加这个范围,以避免所有的警告?
当我尝试使用ggplot
生成图时,收到此警告。
在网上研究了一段时间后,许多人认为我的数据库通常包含空值或缺失数据,但事实并非如此。
In this question接受的答案如下:
该警告意味着某些元素由于超出指定范围而被移除
我想知道这个范围到底指的是什么,怎么才能有人手动增加这个范围,以避免所有的警告?
7条答案
按热度按时间ojsjcaue1#
您看到的行为是由于
ggplot2
处理绘图轴范围之外的数据的方式。scale_y_continuous
(或等效的ylim
)在计算统计量、汇总或回归线时排除绘图区域之外的值。coord_cartesian
包括这些计算中的所有值,而不管它们在绘图区域中是否可见。以下是一些示例:所有点在此图中都可见:
在下图中,hp = 1000的一个点超出了该图的y轴范围。由于我们使用
scale_y_continuous
设置y轴范围,因此该点不包含在ggplot计算的任何其他统计量或汇总度量中,如geom_smooth
计算的线性回归线。ggplot
还提供有关排除点的警告。在下图中,hp = 1000的点仍在图的y轴范围之外。但是,由于我们使用了
coord_cartesian
,因此该点仍包含在ggplot计算的任何统计量或汇总度量(如线性回归线)中。如果将此图与上一个图进行比较,您可以看到第二个图中的线性回归线具有更陡的斜率和更宽的置信带,因为计算回归线时包括了hp=1000的点,尽管该点在图中不可见。
oyxsuwqo2#
只是为了完成eipi10给出的答案的震撼。
我也遇到了同样的问题,既没有使用
scale_y_continuous
,也没有使用coord_cartesian
。冲突来自x轴,我在x轴上定义了
limits = c(1, 30)
,如果你想“避开”你的条,这样的限制似乎不能提供足够的空间,所以R仍然会抛出错误删除8行包含缺失值(geom_bar)
将x轴的限制调整为
limits = c(0, 31)
解决了该问题。总之,即使您没有对y轴设置限制,也要检查x轴的行为以确保有足够的空间
67up9zun3#
即使您的数据福尔斯指定的限制范围内(例如
c(0, 335)
),添加geom_jitter()
语句也可能会将某些点推到这些限制之外,从而产生相同的错误消息。由reprex package(v0.3.0)于2020年8月24日创建
ws51t4hk4#
我知道这个问题已经有了答案,但这是另一个可能的解决方案。由于你没有提供一个示例代码,我不能肯定。
如果你只是想摆脱它,这对我来说意味着你对输出没问题。然后你可以尝试以下操作:
na.rm=TRUE
添加到geom_something
,如下所示:geom_line(..., na.rm=TRUE )
这将明确告知geom_line(和geom_path)可以删除NA值。
分析警告消息:
警告:已删除包含缺失值的k行(geom_path)
这主要告诉您3件事:
警告没有告诉您的是为什么这些行有缺失(NA)值,这只有您可能知道。
一个常见的原因来自于对比例的限制,比如
scale_x_datetime
或scale_y_continuous
。这是有意义的,因为要绘制的(X,Y)对不需要为NA。
当您将X刻度设置为较大值时,没有Y,或者Y数据为NA。您将得到(X,Y)点,其中一个为NA。
您可能出于多种原因想要设置更大的比例,但ggplot总是会发现没有关联的Y值,因此触发警告而不是错误是有意义的。
祝你愉快。
xn1cxnb45#
我也遇到过这种情况,但是我想避免额外的错误消息,同时保持提供的范围。一个选项是在设置范围之前对数据进行子集化,这样就可以按照您的意愿保留范围,而不会触发警告。
kxxlusnw6#
另一个原因是NA的存在。假设你的数组名是
arr
。你可以简单地检查你的数组中是否有NA:如果答案为真,则必须删除NA,如下所示:
即使没有
any(is.na(arr))
,您也可以简单地运行上面的命令,R将删除可能存在的任何NA。wr98u20j7#
2019年开发的*直方图的另一个重要变化。
计算被更新了包括了一些东西-原谅我可能过于简化了-
如根据装仓轴上的
limit=()
规范创建仓,如果这比你的数据更广泛,
-与裁剪数据完全不同的问题,但消息相同。
ggplot开发人员在github中建议了几种不同的处理方法,https://github.com/tidyverse/ggplot2/issues/3265
https://github.com/tidyverse/ggplot2/issues/4083
1a.如果在轴声明中使用
limit=()
,请将limit=()
精确地设置为条形的范围,即使轴断点更宽或1b.将选项
oob = scales::keep_oob
添加到有问题的轴声明中或2.如果使用
xlim
或ylim
,则将其 Package 为coord_cartesian()