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")