【发布时间】:2012-07-09 07:50:38
【问题描述】:
我想做与this question相反的事情,和this question做相反的事情,虽然那是关于传说,而不是情节本身。
其他 SO 问题似乎是在询问如何保持未使用的因子水平。我实际上希望我的删除。我有几个名称变量和几个变量属性列(宽格式),用于创建大量条形图。这是一个可重现的示例:
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()
我明白了:
我只希望在我的条形图中显示具有相应 varn 的名称(例如,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。
【问题讨论】:
-
为什么你需要一个数据框开始,而你实际上只是绘制一行?如果您没有数据框(更确切地说,只有一个列表/向量),您可以删除 NA 字段)。
-
@TiloWiklund:我是 R 新手,所以请随意提出替代方案。我正在针对一系列绘图的许多不同数据列绘制一列名称。有些列不完整,有些则不完整。不完整的与上述类似,并且留下了我不想要的空白,因为我只需要比较实际具有与特定测量响应相关联的数据的变量。这有意义吗?
-
您也可以通过仅在该列上设置条件来简单地删除行:
ggplot(df[!is.na(df$var1),], aes(x=name,y=var1)) + geom_bar()。 -
@joran:这似乎与下面的 Tilo 解决方案非常相似,尽管比传递两个向量名称要简单一些。不管省略 na 的调整如何,我想真正的教训是没有办法从 ggplot 自动执行此操作。
-
@TiloWiklund
ggplot()需要一个数据框作为它的第一个参数。无论如何,他不是画了两行吗,一个是因子(name),另一个是数字(var1)? Hendy 需要传递这两个变量,否则ggplot()怎么知道将值绘制为两个条形而不是数据的数字向量?