能否在ggplot2中交替排列geom图形?实现halfeye与点交替展示
实现真实值与对应模拟密度曲线的交替排列
完全可行,核心是先对数据做分组配对处理,再调整y轴顺序,让每个真实值精准紧跟在对应模拟密度曲线的下方。具体修改步骤如下:
1. 重构数据,区分参数与数据类型
在数据预处理阶段,把key列拆分为参数名(如b1、b3)和数据类型(模拟值_hat/真实值),方便后续分组排序:
library(forcats) library(ggdist) library(dplyr) library(tidyr) plot_data <- bias %>% select(mrdoc2_b1_hat, b1, mrdoc2_b3_hat, b3) %>% select(!contains("_se")) %>% pivot_longer(cols = everything(), names_to = "key", values_to = "value") %>% # 拆分key,提取参数名并标记数据类型 mutate( param = case_when( str_detect(key, "b1") ~ "b1", str_detect(key, "b3") ~ "b3" ), type = ifelse(str_detect(key, "_hat$"), "模拟值", "真实值") ) %>% # 按参数名分组,让模拟值排在真实值前面 arrange(param, desc(type))
2. 调整绘图的y轴映射
用param和type组合成新的y轴变量,并用fct_inorder固定顺序,确保每组模拟值和真实值相邻:
plot_data %>% ggplot(aes(x = value, y = fct_inorder(paste(param, type, sep = " - ")))) + # 绘制模拟值的halfeye密度图 stat_halfeye(data = . %>% filter(type == "模拟值")) + # 绘制真实值的标记点,无需偏移,y轴已固定位置 geom_point(data = . %>% filter(type == "真实值"), pch = "|", size = 2) + labs(y = "参数类型")
效果说明
处理后,每个参数的模拟密度曲线(如b1_hat)会排在上方,对应的真实值(b1)紧跟在下方,完美实现交替排列的需求。
内容的提问来源于stack exchange,提问作者lf_araujo
相关产品推荐
相关产品推荐

