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

在R的ggplot中堆叠底部图例,适配含多几何对象的绘图区域

解决方案:调整ggplot图例布局与空间分配

以下是针对你的需求优化后的代码,解决了图例超出窗口、绘图区域压缩及图例布局的问题:

library(tidyverse)

iris |>
  rowwise() |>
  mutate(
    min = Petal.Width -.5,
    mid = Petal.Width + 1.5,
    max = Petal.Width + 3.5,
    pw1 = Petal.Width +1,
    pw2 = Petal.Width + 2,
    pw3 = Petal.Width + 3
  ) |>
  ggplot(aes(x = Petal.Length))+
  # 修正fill标签的语法错误(补全右括号)
  geom_ribbon(aes(ymin = Petal.Width,
                  ymax = pw3,
                  fill = "Normal Range \n(middle 80%)"),
              alpha = .7)+
  geom_ribbon(aes(ymin = pw1,
                  ymax = pw2,
                  fill = "Inner Quartile Range \n(middle 50%)"),
              alpha = .7)+
  geom_line(aes(y = max, linetype = "Maximum"))+
  geom_line(aes(y = mid, linetype = "Median"))+
  geom_line(aes(y = min, linetype = "Minimum"))+
  scale_fill_manual("Statistic",
                    values = c("lightgreen", "blue"),
                    # 控制填充图例的顺序、换行及标题位置
                    guide = guide_legend(order = 1, nrow = 2, title.position = "left")) +
  scale_linetype_manual("",
                        values = c("dotted", "dashed", "dotted"),
                        # 控制线型图例的顺序与换行
                        guide = guide_legend(order = 2, nrow = 3)) +
  theme(
    legend.position = "bottom",
    legend.box = "vertical",  # 让两个图例垂直堆叠
    legend.box.just = "center",  # 图例组整体居中
    legend.spacing.y = unit(0.5, "lines"),  # 两个图例间的垂直间距
    legend.key.height = unit(0.8, "lines"),  # 缩小图例项高度,减少垂直空间占用
    legend.margin = margin(t = 5, r = 5, b = 5, l = 5),  # 图例内部边距
    plot.margin = margin(t = 10, r = 10, b = 20, l = 10)  # 增大底部边距,避免图例被截断
  )

关键调整说明

  • 语法修正:补全geom_ribbon中fill标签缺失的右括号,避免代码报错。
  • 图例顺序与布局:
    • 通过guide_legend(order = 1/2)明确填充图例在上、线型图例在下的堆叠顺序。
    • 用nrow参数让两类图例的项垂直排列,减少水平空间占用。
    • title.position = "left"实现填充图例标题“Statistic”左对齐。
  • 空间优化:
    • legend.box = "vertical"强制图例垂直堆叠,而非默认的水平排列。
    • legend.key.height缩小图例项高度,降低图例整体垂直空间占比,避免压缩绘图区域。
    • plot.margin增大底部边距,确保图例完全显示在窗口内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:46:31