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

使用ggrain包绘制雨云图:调整密度图重叠布局求助

解决ggrain雨云图中重叠小提琴图的问题

要实现分组条形图保持原位置、pre/post阶段小提琴图重叠的效果,直接使用violin.args.position参数无法精准控制,建议拆分geom_grain图层,通过手动偏移x轴位置来实现重叠,具体步骤如下:

1. 确保数据为长格式(若未转换)

如果你的BSL1是宽格式(列包含bslpre和bslzpost),先转成长格式方便绘图:

library(tidyverse)
library(ggrain)

BSL1_long <- BSL1 %>%
  pivot_longer(
    cols = c(bslpre, bslzpost),
    names_to = "Time",
    values_to = "Y"
  )

2. 绘制重叠小提琴+分组条形图

拆分pre和post的雨云图层,用position_nudge调整pre阶段小提琴的x位置,使其与post阶段重叠,同时保持条形图在原分组位置:

ggplot(BSL1_long, aes(x = Time, y = Y)) +
  # 分组条形图(保持原位置)
  stat_summary(
    fun = mean,
    geom = "bar",
    aes(fill = Time),
    position = position_dodge(width = 0.8),
    width = 0.6
  ) +
  # pre阶段雨云图:偏移x轴到post位置
  geom_grain(
    data = filter(BSL1_long, Time == "bslpre"),
    aes(fill = Time),
    violin.args = list(position = position_nudge(x = 0.4)), # 偏移量对应dodge宽度的一半
    point.args = list(position = position_nudge(x = 0.4)) # 若需要点也跟随重叠,保留此参数
  ) +
  # post阶段雨云图:保持原位置
  geom_grain(
    data = filter(BSL1_long, Time == "bslzpost"),
    aes(fill = Time),
    violin.args = list(position = position_nudge(x = 0))
  ) +
  # 适配发表的样式调整
  scale_fill_manual(values = c("bslpre" = "#2c3e50", "bslzpost" = "#e74c3c")) +
  theme_classic(base_size = 12) +
  labs(x = "时间点", y = "Y值")

关键说明

  • 拆分图层后可以精准控制每个阶段小提琴的位置,避免violin.args.position参数的局限性。
  • position_nudge(x = 0.4)中的偏移量对应条形图position_dodge(width = 0.8)的一半,刚好让pre的小提琴完全重叠到post的位置。
  • 若不需要散点跟随重叠,可删除point.args参数,散点会留在pre的原位置。

内容的提问来源于stack exchange,提问作者Minnesooota12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:13:30