如何在R语言的Plotly中隐藏含NA值数据的插值填充?
解决Plotly折线填充时NA区域自动填充的问题
要让NA对应的填充区域为空,同时不把NA设为0、hover时不显示无效值,核心思路是把数据拆分成连续的非NA片段,每个片段单独作为一个绘图轨迹(trace),中间NA的部分就不会被连接和填充。
具体实现代码
library(plotly) library(dplyr) set.seed(1) A = data.frame(x = 1900:2000, value=cumsum(rnorm(101))) A[40:70, 2] = NA # 修正原代码的小问题:原数据仅两列,无需指定2:3 # 给连续的非NA数据分组 A <- A %>% mutate( is_na = is.na(value), # 用rle识别连续非NA区间,给每个区间分配唯一组号 group = with(rle(!is_na), rep(cumsum(values), lengths)) ) %>% filter(!is_na) # 仅保留有效数据 # 初始化绘图对象 fig <- plot_ly() # 遍历每个分组,添加独立的折线填充轨迹 for (g in unique(A$group)) { subset_data <- filter(A, group == g) fig <- fig %>% add_trace( x = subset_data$x, y = subset_data$value, type = 'scatter', mode = 'lines', fill = 'tozeroy', showlegend = FALSE # 无需显示多个重复图例 ) } fig
效果说明
- 拆分后每个连续非NA段独立绘制折线并填充到y轴,中间NA区域因无对应轨迹,自然保持空白。
- hover时仅显示有效数据点,不会出现0或NA类无效内容,完全符合需求。
内容的提问来源于stack exchange,提问作者Koot6133
相关产品推荐
相关产品推荐

