我正在尝试使用 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。
如果只有“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")