从 ggplot 条形图中删除未使用的因子水平

问题描述 投票:0回答:4

我想做与这个问题相反的事情,有点与这个问题相反,尽管那是关于传说,而不是情节本身。

其他问题似乎是在问如何“保持”未使用的因子水平。我实际上希望将我的删除。我有几个名称变量和几列(宽格式)变量属性,我用它们来创建大量条形图。这是一个可重现的示例: library(ggplot2) df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5)) ggplot(df, aes(x=name,y=var1)) + geom_bar()

我明白了:

enter image description here我只想在我的条形图中显示具有相应 var

n

的名称(例如,B 不会有空白空间)。 如果我可以简单地更改输出文件名和

y=var

位,重用基本绘图代码将非常容易。如果可能的话,我不想只为了在每个图的结果上使用 droplevels 来对我的数据框进行子集化!



根据

na.omit()建议更新



考虑修改后的数据集:

library(ggplot2) df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5), var3=c(NA,6,7)) ggplot(df, aes(x=name,y=var1)) + geom_bar()

我需要使用 
na.omit()

来绘制

var1
,因为存在 NA。但由于 na.omit 确保
所有列
都存在值,因此该图也会删除 A,因为它在
var3
中具有 NA。这与我的数据更相似。我总共有 15 条回复,其中充斥着 NA。我只想删除没有
current
绘制的 y 向量值的因子水平,而不是在整个数据框中的 any 向量中具有 NA 的因子水平。

r plot ggplot2 factors
4个回答
21
投票
na.omit()

df
使用
NA
 删除这些行

ggplot(na.omit(df), aes(x=name,y=var1)) + geom_bar()

根据您的更新,以下内容

ggplot(df[!is.na(df$var1), ], aes(x=name,y=var1)) + geom_bar()

工作正常,仅考虑 
NA

中的

Var1
。鉴于您仅绘制
name
Var
,请将
na.omit()
应用于仅包含这些变量的数据框

ggplot(na.omit(df[, c("name", "var1")]), aes(x=name,y=var1)) + geom_bar()



6
投票
x[,c("name", "var1")]

应用 na.omit 来删除不需要的行(如Gavin Simpson 建议)

na.omit(x[,c("name", "var1")])
,然后绘制这些数据。

我的 R/ggplot 相当生疏,我意识到可能有更干净的方法来实现这一点。


2
投票

library(ggplot2) library(tidyr) df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5)) df %>% drop_na(var1) %>% ggplot(aes(name, var1)) + geom_col()

reprex 包于 2021 年 12 月 3 日创建(v2.0.1)


0
投票

library(ggplot2) df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5)) a1<-ggplot(df, aes(x=name,y=var1)) + geom_bar() a1+scale_x_discrete(limits=c("A", "C"))

© www.soinside.com 2019 - 2024. All rights reserved.