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

使用ggMarginal时如何自定义箱线图的尺寸与排序

解决方案

核心实现逻辑

两个需求都可以通过调整因子配置和ggMarginal传参实现:

  • 排序统一:将分组字段ID转为有序因子,手动指定和你要求的颜色顺序匹配的因子水平,ggplot和ggMarginal都会自动继承该排序,x、y轴的边际箱线图顺序会完全同步
  • 箱线图宽度统一:一是向边际箱线图图层透传统一的width参数,二是调整边际图和主图的占比,避免边际区域空间不足导致箱线图被挤压变形

另外你当前代码存在明显错误:ggMarginal的第一个入参需要传入你提前构建的ggplot对象,而不是原始数据集,否则边际图不会继承你自定义的颜色、分组配置。

完整调整后代码

library(ggplot2)
library(ggExtra)

# 第一步:将ID转为有序因子,levels按你要求的绿、黄、蓝、红、棕、紫对应的实际ID值填写
# 注意把下方levels参数里的占位值替换成你数据集里ID列的实际取值,顺序严格对应你要的展示顺序
my_data$ID <- factor(my_data$ID, levels = c("绿色对应ID值", "黄色对应ID值", "蓝色对应ID值", "红色对应ID值", "棕色对应ID值", "紫色对应ID值"))

# 第二步:构建基础散点图
p <- ggplot(my_data, aes(x = O, y = H)) +
  geom_point(aes(color = ID, group = ID), size = 5) +
  # 自定义颜色映射,values顺序和因子水平顺序完全对应
  scale_color_manual(
    name = "",
    values = c("green", "yellow", "blue", "red", "brown", "purple"),
    # 你原来的labels有重复的"s",如果是不同类别请调整避免冲突
    labels = c("b", "d", "g", "o", "s1", "s2")
  ) +
  # 因为启用了groupFill,需要同步配置填充色映射
  scale_fill_manual(
    name = "",
    values = c("green", "yellow", "blue", "red", "brown", "purple"),
    labels = c("b", "d", "g", "o", "s1", "s2")
  )

# 第三步:生成带边际箱线图的最终图表
ggMarginal(
  p,
  type = "boxplot",
  groupColour = TRUE,
  groupFill = TRUE,
  # 统一所有箱线图的自身宽度,可根据需求调整数值
  width = 0.5,
  # 主图和边际图的占比,数值越大主图占比越高,可根据布局调整
  size = 5
)

参数调整说明

如果箱线图还是存在宽度不一致的情况,可以适当调小width的数值,或者调小size的数值给边际图留出更多展示空间;如果需要调整颜色的具体色值,可以把values里的颜色名替换为十六进制色码,顺序保持和因子水平一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:57:04