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()