You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:57:34