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

如何用ggpaired设置箱线图填充色与连接线颜色区分?

问题

需要生成带配对数据连接线的箱线图(以Apples和Oranges为例),要求:

  • 连接线颜色根据数值大小区分:Apples>Oranges用颜色A,Oranges>Apples用颜色B;
  • 箱线图填充色单独设置:Apples列用颜色C,Oranges列用颜色D。

初始数据格式(简化示例):

ApplesOrangesSeason
75Spring
38Spring
47Summer
63Summer
43Fall
25Fall

已添加line_colour列区分线条颜色:

mydata$line_colour = ifelse(mydata$Apples < mydata$Oranges, 'A', 'B')

使用ggpaired绘图的当前代码如下,已实现连接线颜色按line_colour分配,但箱线填充色与连接线共用了同一调色板,需要修改代码让箱线填充色使用独立的指定颜色:

p             = ggpaired(mydata, 
cond1         = 'apples' , 
cond2         = 'oranges' ,
facet.by      = 'season' ,
fill          = 'condition' ,
color         = 'grey12' ,
panel.labs    = list(season = c('Autumn','Spring','Summer')) ,
point.size    = 1.5 ,
line.size     = 0.6 ,
line.color    = 'line_colour' ,
title         = NULL ,
palette       = c(fill_alpha('dodgerblue', 0.5),fill_alpha('tomato1', 0.5))
)

p
解决方案

问题出在palette参数会同时作用于填充色和线条颜色的映射。要实现填充色独立指定,需移除palette参数,改用scale_fill_manual手动设置箱线填充色,同时用scale_color_manual指定连接线的颜色(对应line_colour列的A/B分组)。

修改后的代码如下:

library(ggpubr)
library(scales)

# 生成线条颜色分组列
mydata$line_colour = ifelse(mydata$Apples < mydata$Oranges, 'A', 'B')

p = ggpaired(mydata, 
             cond1         = 'Apples' ,  # 匹配数据中的大写列名,若你的数据是小写则改回对应写法
             cond2         = 'Oranges' ,
             facet.by      = 'Season' ,
             fill          = 'condition' ,
             color         = 'grey12' ,  # 箱线边框保持灰色
             panel.labs    = list(Season = c('Autumn','Spring','Summer')) ,
             point.size    = 1.5 ,
             line.size     = 0.6 ,
             line.color    = 'line_colour' ,  # 用line_colour控制线条颜色
             title         = NULL 
)

# 手动指定箱线填充色:对应condition的两个类别(Apples和Oranges)
p = p + scale_fill_manual(values = c(
  'Apples' = fill_alpha('dodgerblue', 0.5),  # 颜色C:半透明深蓝色
  'Oranges' = fill_alpha('tomato1', 0.5)     # 颜色D:半透明番茄红
))

# 手动指定连接线颜色:对应line_colour的A/B分组
p = p + scale_color_manual(values = c(
  'A' = 'red',  # 颜色B:Oranges>Apples时的线条颜色
  'B' = 'green' # 颜色A:Apples>Oranges时的线条颜色
))

print(p)

关键修改说明

  1. 移除原代码中的palette参数,避免它同时影响填充色和线条颜色;
  2. 通过scale_fill_manual直接将condition(即Apples/Oranges)绑定到指定填充色,完全独立于线条颜色设置;
  3. 使用scale_color_manual为line_colour的A/B分组指定对应颜色,实现连接线颜色按数值大小区分的需求;
  4. 修正了原代码中列名大小写不匹配的问题,确保代码能正确读取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:25:08