如何在echarts4r中实现带分组的分面折线散点图(复刻ggplot效果)
在echarts4r中复刻ggplot的分面分组折线散点图
问题说明
认可echarts4r的功能,希望在Shiny应用中使用,但无法复刻ggplot里的分面分组折线散点图——具体是没法实现按id分组,让折线连接对应id的散点,同时按dose分面展示。
示例数据
library(tidyverse) library(echarts4r) data = tibble(time = factor(sort(rep(c(4,8,24), 30)), levels = c(4,8,24)), dose = factor(rep(c(1,2,3), 30), levels = c(1,2,3)), id = rep(sort(rep(LETTERS[1:10], 3)),3), y = rnorm(n = 90, mean = 5, sd = 3))
目标ggplot效果
以下ggplot代码实现了需求:按dose分面,每个分面内按id分组,用折线连接同一id的散点。
ggplot(data = data, mapping = aes(x = time, y = y, group = id)) + geom_point() + geom_line() + facet_wrap(~dose)
尝试的无效代码
尝试通过group_by(dose)配合e_facet实现分面,但未达到按id分组连线的效果:
data %>% group_by(dose) %>% e_charts(time) %>% e_line(y) %>% e_facet(rows = 1, cols = 3)
解决方案
核心是用e_group(id)指定分组依据,再结合e_facet按dose分面,同时分别添加折线和散点:
data %>% e_charts(time) %>% e_group(id) %>% # 指定按id分组,确保折线连接同一id的点 e_line(y, symbol = "none") %>% # 绘制折线,关闭默认点避免与散点重复 e_point(y) %>% # 添加散点 e_facet(rows = 1, cols = 3, facet_by = "dose") # 按dose分面展示
关键说明
e_group(id)是实现按id连线的核心,它让echarts4r识别每个id的系列,单独绘制折线- 无需提前用
group_by(dose),直接在e_facet中通过facet_by参数指定分面字段即可 - 分开使用
e_line和e_point可以分别控制两者的样式,比如给折线设置symbol = "none"避免点重复显示
内容的提问来源于stack exchange,提问作者Hugo van Kessel
相关产品推荐
相关产品推荐

