基于半球与脑区的power均值绘制指定结构可视化图表
实现方案:分半球/脑区的EEG功率均值图表
要实现你要的两列图表(一列按半球聚合、一列按脑区聚合),核心是先分别对数据做两类聚合,再合并后用分面区分两类视图,具体操作如下:
关键步骤说明
- 分别按「半球(hemisphere)」和「脑区(region)」维度,结合group、task、frequency计算power的均值与置信区间
- 给两类聚合结果添加标记字段(比如
agg_type),用来区分是半球还是脑区的聚合数据 - 用
facet_grid按聚合类型分列,同时保留原有的frequency行分面
完整代码实现
library(ggplot2) library(dplyr) # 生成模拟数据(和原代码一致) df <- expand.grid( group = c("Children", "Teenagers"), task = c("A", "B", "C"), hemisphere = c("Left", "Right"), region = c("Frontal", "Motor"), frequency = c("Alpha", "Beta", "Theta") ) df$power <- runif(nrow(df)) # 1. 按半球聚合数据 agg_hemisphere <- df %>% group_by(group, task, frequency, hemisphere) %>% summarise(mean_cl_boot(power), .groups = "drop") %>% mutate(agg_type = "半球", category = hemisphere) # 2. 按脑区聚合数据 agg_region <- df %>% group_by(group, task, frequency, region) %>% summarise(mean_cl_boot(power), .groups = "drop") %>% mutate(agg_type = "脑区", category = region) # 3. 合并两类聚合数据 combined_df <- bind_rows(agg_hemisphere, agg_region) %>% mutate(frequency = factor(frequency, levels = c("Alpha", "Beta", "Theta"))) # 4. 绘制图表 interaction_plot <- ggplot(combined_df, aes(x = task, y = y, color = group)) + # 绘制均值折线 geom_line(aes(group = group), size = 1.5, position = position_dodge(0.2)) + # 绘制误差棒(用聚合好的ymin/ymax) geom_errorbar(aes(ymin = ymin, ymax = ymax), width = 0.3, position = position_dodge(0.2)) + # 分面:行是频段,列是聚合类型(半球/脑区) facet_grid(frequency ~ agg_type, space = "free_y", scales = "free_y") + labs(x = "任务", y = "EEG频段功率均值", color = "组别") + theme_minimal(base_size = 12) + theme( strip.background = element_blank(), strip.text.y = element_text(angle = 0, hjust = 0.5, size = 14), strip.text.x = element_text(size = 14) ) interaction_plot
代码解释
- 用
mean_cl_boot直接计算均值和自助法置信区间,避免重复调用stat_summary agg_type字段用来控制分面的列,实现左右两列分别展示半球和脑区的结果- 如果需要在每个分面内进一步区分Left/Right或Frontal/Motor,可基于
category字段调整aes的分组逻辑或添加次级分面
内容的提问来源于stack exchange,提问作者always.learning
相关产品推荐
相关产品推荐

