如何缩小Raincloud图分面间距并完整绘制stat_dots?
解决ggplot2+ggdist绘制Raincloud图的两个问题
一、缩小分面间距
分面间距过大可通过分面函数参数或主题设置直接调整:
通过分面函数快速调整
在facet_wrap中设置panel.spacing参数,直接指定分面间的距离(支持cm、mm、in等单位):facet_wrap(~IGA_condition, ncol = 2, panel.spacing = unit(0.2, "cm"))通过主题精细控制方向间距
如果需要单独调整横向/纵向分面的间距,在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
相关产品推荐
相关产品推荐

