如何用echarts4r的e_line按分类变量(Alert)设置线条颜色?
实现类似Our World In Data的分类变色折线图(基于echarts4r)
你想要制作类似Our World In Data的折线图,让线条颜色随分类变量Alert变化(因阈值存在季节性,用该变量区分状态),但目前的代码存在几处问题,且e_visual_map相关文档较少,下面是修正方案:
原代码的问题点
seq函数步长参数错误:应为by=1而非b=1Alert变量转换逻辑错误:Alert是逻辑类型(TRUE/FALSE),不能直接和字符串"FALSE"比较,无需用case_when,直接转数值即可e_visual_map类型不匹配:Alert是二元分类变量(0/1),应使用type="piecewise"而非continuous
修正后的完整代码
library(echarts4r) library(dplyr) library(zoo) # 生成基础数据 x <- seq( from = 1, to = 100, by = 1 # 修正步长参数 ) y <- sin(x) df <- data.frame(x = x, y = y) # 数据处理:计算滚动均值、阈值和Alert变量 df1 <- df %>% mutate(rM = rollmean( y, k = 3, # rollmean窗口参数统一用k,语义更清晰 fill = NA, # 新版zoo推荐用fill替代na.pad align = "center" )) %>% mutate(Threshold = round(rM, 2)) %>% mutate(Alert = as.numeric(y > Threshold)) # 直接将逻辑值转数值,简化逻辑 # 绘制分类变色折线图 df1 %>% e_charts(x) %>% e_line(y, encode = list(color = "Alert")) %>% # 将颜色与Alert变量绑定 e_visual_map( "Alert", type = "piecewise", # 适配分类变量的视觉映射类型 inRange = list(color = c("#f6efa6", "#bf444c")), # 对应Alert=0和Alert=1的颜色 bottom = 10, # 调整位置避免重叠 showLabel = TRUE # 显示分类标签 )
关键说明
e_line中通过encode = list(color = "Alert"),将折线颜色与Alert变量关联,让不同分类的线段自动对应设定颜色e_visual_map使用type="piecewise"适配二元分类场景,inRange内的颜色顺序与Alert的0、1值一一对应- 若不需要显示视觉映射组件,可添加
show=FALSE参数隐藏
内容的提问来源于stack exchange,提问作者user3355655
相关产品推荐
相关产品推荐

