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

如何将ggdist包中左侧半小提琴图旋转至对应箱线图左侧?

解决雨云图半小提琴分组左右摆放问题

首先需要把宽格式的数据转换为长格式,这样才能按分组(Q/A)分别控制半小提琴的方向,具体实现代码如下:

library(tidyverse)
library(ggdist)

# 原数据
set.seed(123)
df <- data.frame(
  ID = 1:50,
  Q = rnorm(50),
  A = rnorm(50,1)
)

# 转长格式
df_long <- df %>% 
  pivot_longer(cols = c(Q, A), names_to = "Group", values_to = "Value")

# 绘制雨云图
ggplot(df_long, aes(x = Group, y = Value)) +
  # 半小提琴图:按分组设置左右方向
  geom_half_violin(
    aes(fill = Group),
    side = ifelse(df_long$Group == "Q", "left", "right"),
    scale = "width",
    position = position_nudge(x = c(-0.15, 0.15)[match(df_long$Group, c("Q", "A"))]),
    alpha = 0.7
  ) +
  # 箱线图
  geom_boxplot(
    width = 0.2,
    outlier.shape = NA,
    alpha = 0.5
  ) +
  # 散点(雨云的点部分)
  geom_jitter(
    aes(color = Group),
    width = 0.05,
    size = 1,
    alpha = 0.6
  ) +
  theme_minimal() +
  labs(x = "分组", y = "数值") +
  scale_fill_brewer(palette = "Set2") +
  scale_color_brewer(palette = "Set2")

关键说明

  • 宽转长是核心:原数据中Q和A是独立列,转成长格式后才能通过Group列区分两组,实现分方向控制。
  • 用side参数替代justification:geom_half_violin的justification参数不支持按分组传入多个值,这是你之前出错的原因。改用side参数,按分组分别设置"left"和"right"即可实现左右摆放。
  • 位置微调:通过position_nudge让半小提琴和箱线图错开,避免重叠,提升图表可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:47:11