R 填充值均为NA时的ggplot2错误:序列默认值中的错误(h[1],h[2],length.out=n):

R 填充值均为NA时的ggplot2错误:序列默认值中的错误(h[1],h[2],length.out=n):,r,ggplot2,R,Ggplot2,我有一个通用的plot\u数据(data)方法。有时,传入数据包含我用于填充的变量的所有NAs,这会导致错误 Error in seq.default(h[1], h[2], length.out = n) : 'to' must be a finite number 例如: df <- data.frame( x = c(1, 2, 3, 4), y = c(10, 15, 20, 25), foo = factor(c(NA, NA, NA, "yes"), le

我有一个通用的
plot\u数据(data)
方法。有时,传入数据包含我用于填充的变量的所有NAs,这会导致错误

Error in seq.default(h[1], h[2], length.out = n) : 
  'to' must be a finite number
例如:

df <- data.frame(
  x = c(1, 2, 3, 4), 
  y = c(10, 15, 20, 25),
  foo = factor(c(NA, NA, NA, "yes"), levels=c("yes", "no"))
)

ggplot(df, aes(x=x, y=y, fill=foo))+geom_bar(stat = "identity")  # works
ggplot(df[1:3, ], aes(x=x, y=y, fill=foo))+geom_bar(stat = "identity")  # error
df有点恶心

ggplot(df[1:3,], aes(x=x, y=y, if(!all(is.na(foo))){fill=foo})) +
  geom_bar(stat = "identity")

灰色意味着没有填充物。例如,以下图形将显示灰色图形:

ggplot(df,aes(x=x,y=y))+geom_-bar(stat=“identity”)
在您的示例中,当包含带有
foo=“yes”
的行时,带有
foo=NA
的行实际上没有填充颜色,只有最后一行被填充。但是,如果排除最后一行,则列
foo
中的所有值将变为
NA
。如错误所示,填充映射中的
的结尾必须是有限的数字,而不是
NA
。避免这种情况的一种方法是将
NA
转换为字符串,例如:

ggplot(df[1:3],aes(x=x,y=y,fill=ifelse(is.na(foo),“na”,foo))+geom_-bar(stat=“identity”)

您可以使用
forcats
包中的
fct\u explicit\u na
将缺少的值设置为显式因子级别。(请注意,基本包中的
addNA
在这里不起作用;后者将NA添加为一个级别,但不会使其显示在绘图中。)

旁白:如果您确实有其他值&只想为NA值使用不同的默认颜色,您可以在
scale\u fill\u discrete(NA.value=“除灰色以外的其他颜色”)

ggplot(df[1:3, ], 
       aes(x=x, y=y, fill=forcats::fct_explicit_na(foo)))+
  geom_bar(stat = "identity")