如何防止在 ggplot2 箱线图中绘制 NA 值?

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

我正在尝试使用 ggplot2 绘制两个数据集“YEN”和“ARC”中的产量数据,但是当我这样做时,它会尝试绘制具有 NA 值的第三个箱线图。

这是我正在使用的脚本:

yieldbox<-ggplot(df, mapping=aes(x=database, 
                                 y=yield_grain, 
                                 fill=database,
                                 na.rm=FALSE
                                 ))+
  geom_boxplot()+
  xlab(NULL)+
  ylab("Grain Yield at Corrected Moisture")

yieldbox

我已经尝试过 na.rm = FALSE 和 !is.na(database),但无论如何它仍然会绘制 NA。

r ggplot2 data-science boxplot na
1个回答
0
投票

如果只有“yield_grain”列为 NA,则应删除这些值,但不会导致绘制额外的“数据库”,请参阅下面的示例代码。 因此,数据框中可能有一行“database”和“yield_grain”均为 NA,因此添加了“NA”数据库的框,但没有显示任何数据,因为它只包含已删除的 NA。

因此最好使用 UseR10085 和 Rui Barradas 上面建议的方法来检查您的数据并检查数据是否包含仅包含 NA 的行并检查它们是如何到达那里的。

另请注意,geom_boxplot() 中的参数“na.rm”不会影响 NA 是否被删除,但如果这种情况默默发生或带有警告,则会发生变化。

library(ggplot2)
utils::packageVersion("ggplot2") # I used version 3.4.2 

# Make mock data to work with
df_no_NA <- data.frame(database = c(rep("A", 10), rep("B", 10)),
                       yield_grain = runif(20))
df_with_NA_yield <- df_no_NA
df_with_NA_yield[3, "yield_grain"] <- NA # Only yield NA
df_with_NA_database <- df_no_NA
df_with_NA_database[3, "database"] <- NA # Only database NA
df_with_NA_both <- df_with_NA_yield
df_with_NA_both[3, ] <- NA # Both yield and database NA

# Only yield NA: no additional bar
ggplot(df_with_NA_yield, mapping = aes(x = database, y = yield_grain,
fill = database)) +
  geom_boxplot() +
  xlab(NULL) +
  ylab("Grain Yield at Corrected Moisture")

# Only database NA: additional column, with appropriate value
ggplot(df_with_NA_database, mapping = aes(x = database, y = yield_grain,
fill = database)) +
  geom_boxplot() +
  xlab(NULL) +
  ylab("Grain Yield at Corrected Moisture")

# Both NA: additional column, empty
ggplot(df_with_NA_both, mapping = aes(x = database, y = yield_grain,
fill = database)) +
  geom_boxplot() +
  xlab(NULL) +
  ylab("Grain Yield at Corrected Moisture")
© www.soinside.com 2019 - 2024. All rights reserved.