R 如果组仅包含NA,则ggplot填充失败

R 如果组仅包含NA,则ggplot填充失败,r,ggplot2,R,Ggplot2,我正在使用ggplot和以下数据绘制箱线图: plot_data <- structure(list(group = c("a1", "a1", "a1", "a2", "a2", "a2", "b1", "b1", "b1", "b2", "b2", "b2"), value = c(1, 2, 3, 1, 2, 3, NA, NA, NA, 1, 2, 3)), .Names = c("group", "value"), row.names = c(NA, -12L), class =

我正在使用ggplot和以下数据绘制箱线图:

plot_data <- structure(list(group = c("a1", "a1", "a1", "a2", "a2", "a2", "b1", "b1", "b1", "b2", "b2", "b2"), value = c(1, 2, 3, 1, 2, 3, NA, NA, NA, 1, 2, 3)), .Names = c("group", "value"), row.names = c(NA, -12L), class = "data.frame")
这将导致以下错误:

Error: Aesthetics must be either length 1 or the same as the data (3): fill
发生错误的原因是一个组只有
NA
ggplot
x
-轴上显示此组,这是我喜欢的,但抱怨填充空的箱线图

我可以通过删除一个fill参数来修复它。 但是,这实际上是不可行的,因为我在循环中多次使用plotting函数,其中某些组的值有时仅为
NA
。我知道,我可以根据数据中包含的组动态创建填充向量,但我希望它保持不变

所以我的问题是:

是否有可能始终使用相同的填充向量,而不通过ggplot投诉?像另一个aes选项吗?

像这样的吗

ggplot(plot_data) +geom_boxplot(aes(x = group, y = value,fill=group))+
  theme_classic()

您指定的
fill
不正确。正如消息所说,它应该是单个值,或者映射到
aes()
中,在这种情况下,它应该引用数据中的一列。在您的情况下,将其映射到
,然后使用
缩放填充(手动)
@joran谢谢,结合Antonis答案,我可以修复它。我不知道,这会有这么大的不同!。。。从技术上讲,OP可能需要类似于
+scale\u fill\u manual(值=c('blue','blue','green','green'))
@Antonis谢谢!是的,加上jorans,它就像一个符咒一样工作:-)
ggplot(plot_data) +geom_boxplot(aes(x = group, y = value,fill=group))+
  theme_classic()