R语言plot_ly绘图报错:Error in if (is.na(col)) { : the condition has length >1
报错原因分析及修复方案
核心报错原因
报错Error in if (is.na(col)) { : the condition has length >1主要来自两个问题:
- 拼写错误导致的NA值:代码中
ifelse(data$Feb22 < data$BJan22,"red", "black")里的BJan22是笔误,应该是Jan22。引用不存在的列会生成包含NA的cols1向量,后续plotly处理颜色时触发长度判断错误。 - plotly颜色参数的错误用法:
add_markers中用I(cols1)包裹颜色向量是错误的。I()是ggplot体系中用来阻止自动映射的函数,plotly中直接传入颜色向量即可,不需要I()。用I()会让plotly把整个向量当成单个颜色值处理,而内部判断逻辑只接受单个值,因此抛出“条件长度大于1”的错误。
额外潜在问题
size1 <- Feb22 - Jan22生成的向量包含负数(比如2-4=-2),散点图的size不能为负数,会导致绘图异常,需要处理(比如取绝对值或设置最小size)。
修复后的代码
x <- c(0,1,2,3,4,5) Jan22 <- c(1,4,2,3,4,5) Feb22 <- c(1,2,3,4,5,6) data <- data.frame(x, Jan22, Feb22) # 修正拼写错误 cols1 <- ifelse(data$Feb22 > data$Jan22, "green", ifelse(data$Feb22 < data$Jan22,"red", "black")) # 处理负数size问题,取绝对值确保size为正 size1 <- abs(Feb22 - Jan22) plot_ly(data, x = ~x, type = 'scatter3d', mode = 'markers') %>% add_markers(y = ~Jan22, z = "Baseline", color = "Black", size = 1) %>% # 去掉I(),直接传入颜色向量 add_markers(y = ~Feb22, z = "Feb-22", color = ~cols1, size = ~size1)
内容的提问来源于stack exchange,提问作者Jawairia
相关产品推荐
相关产品推荐

