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

R语言ggplot2对比箱线图统一配色与双列图例实现方法问询

ggplot2 两类数据对比箱线图自定义实现

核心需求梳理

  • 配色规则:同算法对应的真实观测、模拟数据箱线使用完全相同的填充色,共5种算法对应5种填充色,仅模拟数据箱线设置alpha=0.2半透明效果
  • 图例规则:图例采用双列布局,一列展示真实数据的算法标签,另一列展示带s前缀标识的模拟数据算法标签

原代码问题说明

原代码直接给两个箱线图层映射同一个algo字段作为填充依据,会导致两类数据的图例自动合并,无法拆分出带s前缀的模拟数据标签,也没法单独控制模拟数据的透明度不影响真实数据图层。

可直接运行的修正代码

library(ggplot2)

# 预处理:给模拟数据的算法名加s前缀,和真实数据标签做区分
simulation$algo_label <- paste0("s", simulation$algo)

# 配置5种固定填充色,沿用原代码使用的YlGnBu色系,可按需替换色值
base_colors <- RColorBrewer::brewer.pal(5, "YlGnBu")
real_algo <- unique(ADCF2param_shuffle$algo)
names(base_colors) <- real_algo
sim_colors <- base_colors
names(sim_colors) <- paste0("s", real_algo)
all_colors <- c(base_colors, sim_colors)

p <- ggplot() +
  # 模拟数据箱线层:单独设置0.2透明度,映射带s前缀的标签
  geom_boxplot(
    data = simulation,
    aes(x = param, y = data, fill = algo_label),
    alpha = 0.2
  ) +
  # 真实数据箱线层:不设透明度,映射原算法标签
  geom_boxplot(
    data = ADCF2param_shuffle,
    aes(x = param, y = data, fill = algo)
  ) +
  # 原有红色标记点保持原有设置不变
  geom_point(
    data = gt_vs_fitted,
    aes(x = param, y = data),
    color = "red",
    size = 4,
    shape = 18
  ) +
  # 应用统一配色
  scale_fill_manual(values = all_colors) +
  # 设置图例为双列布局,按列排列实现真实、模拟数据各占一列
  guides(fill = guide_legend(ncol = 2, byrow = FALSE)) +
  theme_classic() +
  labs(y = "CCC", x = "Parameters")

print(p)

补充调整说明

如果需要手动调整图例的标签排列顺序,只需要在scale_fill_manual中传入breaks参数,按你想要的展示顺序传入所有真实、模拟数据的标签名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:06:23