当我尝试使用生成图时,收到此警告ggplot
。
在线研究了一段时间后,许多人建议我的数据库通常包含空值或缺少数据,事实并非如此。
在这个问题上,可接受的答案如下:
警告表示某些元素已删除,因为它们不在指定范围内
我想知道此范围到底指的是什么,有人为了避免所有警告如何手动增加此范围?
Answers:
您看到的行为是由于如何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")
只为完成eipi10给出的答案即可。
我没有使用scale_y_continuous
nor也面临着同样的问题coord_cartesian
。
冲突来自我定义的x轴limits = c(1, 30)
。如果您想“避开”杠,似乎这样的限制不能提供足够的空间,因此R仍然会引发错误
删除了包含缺失值的8行(geom_bar)
调整x轴的极限以limits = c(0, 31)
解决该问题。
总之,即使您没有对y轴设置限制,也请检查x轴行为以确保有足够的空间
即使您的数据落在指定的限制内(例如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
我也遇到了这个问题,但是在我想要避免额外的错误消息的同时保持提供的范围的情况下。还可以选择在设置范围之前对数据进行子集设置,以便可以在不触发警告的情况下保留范围,但是您可以随意设置。
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))
y
这个问题的轴心是有限的。由于该功能,值限制在0到0.12之间:ylim(0,0.12)