R绘图无法显示均值标准差线条、输出integer(0)问题求助
问题解答
1. integer(0)返回值含义
R基础绘图体系中plot()、abline()这类绘图函数本身的返回值就是空整数向量integer(0),属于正常返回结果,不是代码报错,无需额外处理。
你代码中出现这个返回的直接原因是混用了ggplot2和base R的绘图语法:+是ggplot2专有的图层拼接运算符,对base R的绘图函数无效,你写plot(...) + abline(...)实际是将两个函数的返回值(都是integer(0))做加法运算,最终输出相加后的integer(0)。
2. 参考线不显示的原因和修复方案
参考线不显示有两个核心原因:
- 语法错误导致abline指令未生效:刚才提到的
+拼接问题,base R绘图不需要用+连接,每一条绘图指令单独成行即可,abline会自动在当前打开的画布上添加元素。 - y轴范围限制:你设置的
ylim仅匹配了当前散点数据的取值范围,如果mean_Week、均值上下一倍标准差的数值不在这个区间内,就算abline执行了,参考线也会落在画布外不可见。
修正后的函数代码
scatter_date <- function(dt, dta = df) { # 预处理绘图数据 plot_data <- dta %>% filter(date2 == ymd(dt)) %>% summarize(across(starts_with("DR"), sum)) %>% pivot_longer(everything(), names_pattern = "DR(.+)", values_to = "val") %>% mutate(name = as.numeric(name)) # 计算y轴范围时纳入参考线的数值,避免参考线超出画布 y_bounds <- c(plot_data$val, mean_Week - sdeviation_Week, mean_Week + sdeviation_Week) y_min <- min(y_bounds, na.rm = TRUE) y_max <- max(y_bounds, na.rm = TRUE) # 单独执行绘图指令,不要用+拼接 plot(x = plot_data$name, y = plot_data$val, xlab = "Days", ylab = "Types", xlim = c(0, 7), ylim = c((y_min %/% 10) * 10, (y_max %/% 10 + 1) * 10)) abline(h = mean_Week, col = 'blue') abline(h = mean_Week + sdeviation_Week, col = 'green', lty = 2) abline(h = mean_Week - sdeviation_Week, col = 'orange', lty = 2) }
额外检查项
运行代码前先执行nrow(ds_OC)查看结果:如果返回值为0,说明你筛选周四、D列为空的条件没有匹配到有效数据,mean_Week和sdeviation_Week会变成NA,参考线依然无法绘制,需要调整分组筛选的逻辑。
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

