关于我无法用`na.rm = T`禁用的错误的ggplot2警告

时间:2015-03-13 11:25:48

标签: r ggplot2

当你使用ggplot2绘制一些东西时,它会警告你是否自动删除了缺失 我希望能够禁用该特定警告或将na.rm的默认值设置为真系统范围,但这不可能是AFAIK。

我知道我可以通过为我使用的每个geom指定na.rm=T来禁用它。但是当ggplot生成我没有明确指定的更多geom时,这会失败。在下面的示例中,我将使用我的原始数据获得每个绘图的三个警告(当我面对它时为10,所以你可以看到这在编织器报告中变得烦人)。 我可以用na.rm=T来抑制两个警告,但第三个关于geom_segment的警告我不能。顺便说一下,mtcars也会出现这种情况,所以我以此为例。

  

警告讯息:   删除了包含缺失值的23行(geom_segment)。

ggplot(data=mtcars, aes(x = disp, y = wt)) + 
    geom_linerange(stat = "summary", fun.data = "median_hilow", colour = "#aec05d", na.rm=T) + 
    geom_pointrange(stat = "summary", fun.data = "mean_cl_boot", colour = "#6c92b2", na.rm=T)

直到我弄明白这一点,我可以使用warning=FALSE作为违规的块,但我不喜欢这样,因为它可能会抑制我关心的警告。我也可以在数据集上使用na.omit,但这是很多工作和语法,用于确定我将在图中使用哪些变量。

1 个答案:

答案 0 :(得分:2)

我想避免这种情况的唯一方法就是不使用stat_summary,而是自己计算摘要统计信息。对于你的例子来说没问题,但我承认这一般不是一个非常令人满意的解决方案。

# load dplyr package used to calculate summary
require(dplyr)
# calculate summary statistics
df <- mtcars %>% group_by(disp) %>% do(mean_cl_boot(.$wt))
# use geom_point and geom_segment with na.rm=TRUE
ggplot(data=mtcars, aes(x = disp, y = wt)) + 
  geom_linerange(stat = "summary", fun.data = "median_hilow", colour = "#aec05d") + 
  geom_point(data = df, aes(x = disp, y = y), colour = "#6c92b2") +
  geom_segment(data = df, aes(x = disp, xend = disp, y = ymin, yend = ymax), colour = "#6c92b2", na.rm=TRUE) 

或者,您可以编写自己的mean_cl_boot版本。如果yminymaxNA,请将其设置为y的值。

# your summary function 
my_mean_cl_boot <- function(x, ...){
  res <- mean_cl_boot(x, ...)
  res[is.na(res$ymin), "ymin"] <- res[is.na(res$ymin), "y"]
  res[is.na(res$ymax), "ymax"] <- res[is.na(res$ymax), "y"]
  na.omit(res)
}
# plotting command
ggplot(data=mtcars, aes(x = disp, y = wt)) + 
  geom_linerange(stat = "summary", fun.data = "median_hilow", colour = "#aec05d", na.rm=T) + 
  geom_pointrange(stat = "summary", fun.data = "my_mean_cl_boot", colour = "#6c92b2", na.rm=T)