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

Raincloud图重叠问题求助:ggplot绘制温度分布图表遇布局困扰

解决Raincloud图重叠及间距过近的问题

你的问题核心是使用coord_flip()后坐标轴方向互换,但各图层的位置参数没有统一适配,导致position_dodge未生效。以下是具体修改方案:

关键修改点

  • 给ggdist::stat_halfeye、geom_boxplot、ggdist::stat_dots三个图层统一添加position = position_dodge(width = 0.8)(宽度可根据需求微调,0.8是适配性较好的起始值)
  • 适配coord_flip()后的坐标轴方向,调整justification和side参数,避免元素重叠
  • 微调箱线图宽度,让整体布局更协调

修改后的完整代码

airquality %>%
  ggplot(aes(x = factor(Month), y = Temp, fill = factor(Month)))+
  # 半小提琴图:统一position,调整justification适配翻转后的轴
  ggdist::stat_halfeye(
    adjust = 0.5,
    justification = 0.2,  # 替换原-0.2,适配翻转方向
    .width = 0,
    point_colour = NA,
    position = position_dodge(width = 0.8)  # 添加统一的dodge参数
  ) +
  geom_boxplot(
    width = 0.25,  # 微调宽度,和dodge宽度匹配
    outlier.color = NA,
    alpha = 0.5,
    position = position_dodge(width = 0.8)  # 添加统一的dodge参数
  ) +
  # 点图:调整side和justification,适配翻转后的轴
  ggdist::stat_dots(
    side = "right",  # 替换原left,适配翻转方向
    justification = -0.1,  # 替换原1.1,适配翻转方向
    binwidth = .25,
    position = position_dodge(width = 0.8)  # 添加统一的dodge参数
  ) +
  scale_fill_tq() +
  theme_tq() +
  labs(
    title = "Raincloud Plot",
    subtitle = "Showing the Multi-Modal Distributions of Temperatures by Month",
    x    = "Month",
    y    = "Temperature Degrees F",
    fill = "Month"
  ) +
  coord_flip() 

额外优化建议

如果希望月份之间的间距更大,可以在代码中添加scale_x_discrete()调整轴间距:

scale_x_discrete(expand = expansion(add = 0.5)) +

这会增加翻转后垂直轴的两侧间距,让整体布局更宽松。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:45:47