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

如何缩小Raincloud图分面间距并完整绘制stat_dots?

解决ggplot2+ggdist绘制Raincloud图的两个问题

一、缩小分面间距

分面间距过大可通过分面函数参数或主题设置直接调整:

  1. 通过分面函数快速调整
    在facet_wrap中设置panel.spacing参数,直接指定分面间的距离(支持cm、mm、in等单位):

    facet_wrap(~IGA_condition, ncol = 2, panel.spacing = unit(0.2, "cm"))
    
  2. 通过主题精细控制方向间距
    如果需要单独调整横向/纵向分面的间距,在theme()中使用panel.spacing.x或panel.spacing.y:

    theme(
      panel.spacing.x = unit(0.1, "cm"), # 横向分面间距
      panel.spacing.y = unit(0, "cm")    # 纵向分面间距(按需设置)
    )
    

二、避免stat_dots数据截断

数据密集区域的点被截断,是因为默认参数下点堆叠溢出绘图区域,可通过以下参数组合解决:

核心调整方向

  • 缩小binwidth:将密集数据拆分到更多分组,减少单组内的点数量
  • 减小dotsize:降低点的尺寸,节省显示空间
  • 降低stackratio:让同组内的点排列更紧凑
  • 扩展y轴范围:给顶部密集点留出显示空间

完整示例代码

library(ggplot2)
library(ggdist)

# 替换为你的实际数据集
data <- your_dataset

ggplot(data, aes(x = IGA_condition, y = gaze_ratio)) +
  # 雨云图的分布曲线部分
  stat_halfeye(adjust = 0.5, width = 0.6, .width = 0, justification = -0.2, point_colour = NA) +
  # 优化后的stat_dots设置
  stat_dots(
    side = "right",
    justification = 1.2,
    binwidth = 0.01,   # 根据数据分布调整,数值越小分组越细
    dotsize = 0.3,     # 缩小点尺寸,适配密集数据
    stackratio = 0.4,  # 降低堆叠比例,减少纵向空间占用
    position = position_dots(stackdir = "up", stackratio = 0.4)
  ) +
  # 分面并缩小间距
  facet_wrap(~IGA_condition, ncol = 2, panel.spacing = unit(0.2, "cm")) +
  # 扩展y轴顶部空间,避免点被截断
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.2))) +
  # 主题细节优化
  theme(
    panel.spacing.x = unit(0.1, "cm"),
    plot.margin = margin(10, 10, 10, 10)
  )

参数说明

  • binwidth:根据你的数据范围调整,例如gaze_ratio为0-1时,设置0.01或0.005可让密集点分散到更多分组
  • stackratio:默认值为1,数值越小,同一bin内的点堆叠得越紧凑
  • expand参数:mult = c(0.05, 0.2)表示y轴底部扩展5%、顶部扩展20%,确保顶部密集点不会被绘图区域边缘截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:32:53