R 删除所有数据时的图例条目和面

R 删除所有数据时的图例条目和面,r,ggplot2,R,Ggplot2,假设我有一个数据帧,其中缺少一些值: df <- data.frame( group = rep(c("A", "B", "C"), each = 3), x = runif(9), y = c(runif(6), NA, NA, NA) ) 将生成以下警告消息和图形: Warning message: Removed 3 rows containing missing values (geom_point). 如您所见,C组中没有y的观测值,这意味着无法绘制该组的数据

假设我有一个数据帧,其中缺少一些值:

df <- data.frame(
  group = rep(c("A", "B", "C"), each = 3),
  x = runif(9),
  y = c(runif(6), NA, NA, NA)
)
将生成以下警告消息和图形:

Warning message:
Removed 3 rows containing missing values (geom_point). 

如您所见,C组中没有y的观测值,这意味着无法绘制该组的数据。但是,ggplot仍然创建一个空的C方面和一个C图例条目。有没有办法让ggplot意识到它正在从C组中删除所有数据,并删除相应的刻面和图例条目

一种解决方案显然是从基础数据中删除这些行。然而,我的非简化数据框中有几十列可以用作组或轴变量,其中NA值块分散在各处。这意味着我需要为我想要创建的每个图对数据进行不同的子集划分。我希望有一个更简单的解决办法

我看到过与和相关的问题,但这里给出的解决方案似乎无法处理由于NA值而丢失的数据

编辑以澄清额外的复杂性:顶部的数据被简化,并建议一个简单的解决方案,如
na.omit()
。然而,我的真实数据看起来更像这样(显然仍然是简化的):


df对于更新的示例,您可以使用
na.ommit
complete.cases
来获得所需的结果。与:

ggplot(df[complete.cases(df[,c('w','y')]),], aes(w, y)) +
  geom_point(aes(color = group)) +
  facet_grid(.~group, drop = TRUE) +
  theme_bw()
或:

你会得到:


旧答案:使用
na.省略(df)
而不是
df
调用:

ggplot(na.omit(df), aes(x, y)) +
  geom_point(aes(color = group)) +
  facet_grid(. ~ group) +
  theme_bw()
将为您提供所需的结果:


ggplot
调用中使用
na.omit(df)
而不是
df
ggplot(na.omit(df),aes(x,y))+…
会给你想要的结果。@prolalistatusmaximus查看上面的编辑,了解你的建议不起作用的原因(至少在当前的形式下)。虽然您链接的问题可能包含一个可行解决方案的基础,但我不认为它是重复的,因为我问的是明显不同的行为,可能有一个替代的、更简单的解决方案。好的,我重新打开并发布了一个解决方案。我仍然觉得如果ggplot可以自动删除这些,它会更“干净”,但在没有这个选项的情况下,这似乎是最好的解决方案。谢谢@乔:就我所知,目前这是最好的解决方案,但你永远不知道未来会带来什么。。。
ggplot(df[complete.cases(df[,c('w','y')]),], aes(w, y)) +
  geom_point(aes(color = group)) +
  facet_grid(.~group, drop = TRUE) +
  theme_bw()
ggplot(na.omit(df[,c('group','w','y')]), aes(w, y)) +
  geom_point(aes(color = group)) +
  facet_grid(.~group, drop = TRUE) +
  theme_bw()
ggplot(na.omit(df), aes(x, y)) +
  geom_point(aes(color = group)) +
  facet_grid(. ~ group) +
  theme_bw()