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

如何基于自定义X分位数设置箱线图宽度并支持X轴变换?

自定义非对称X范围箱线图解决方案

问题说明

需绘制以x_q50为中心、Y轴分位数自定义的箱线图,要求箱体的X范围对应x_q05(左边界)到x_q95(右边界),同时支持X轴的modulus变换,现有geom_boxplot代码无法实现该非对称X范围的需求。

解决方案代码

library(tidyverse)
library(scales)

# 定义X轴变换
trans <- modulus_trans(0.2)

ggplot(dat) +
  # 绘制下须:y_q025到y_q05,垂直于x_q50
  geom_segment(aes(x = x_q50, xend = x_q50,
                   y = y_q025, yend = y_q05,
                   color = grp),
               linewidth = 1) +
  # 绘制上须:y_q95到y_q975,垂直于x_q50
  geom_segment(aes(x = x_q50, xend = x_q50,
                   y = y_q95, yend = y_q975,
                   color = grp),
               linewidth = 1) +
  # 须的端点(可选)
  geom_point(aes(x = x_q50, y = y_q025, color = grp), size = 2) +
  geom_point(aes(x = x_q50, y = y_q975, color = grp), size = 2) +
  # 绘制箱体:X范围x_q05到x_q95,Y范围y_q05到y_q95
  geom_rect(aes(xmin = x_q05, xmax = x_q95,
                ymin = y_q05, ymax = y_q95,
                fill = grp),
            alpha = 0.8) +
  # 绘制中位数线:贯穿箱体的水平线
  geom_segment(aes(x = x_q05, xend = x_q95,
                   y = y_q50, yend = y_q50,
                   color = grp),
               linewidth = 1.2) +
  # X轴设置,包含变换
  scale_x_continuous(limits = c(0, 2000),
                     breaks = c(0,10,20,30,40,50,100,150,200,250,500,750,1000,1500,2000),
                     labels = c(0,10,20,30,40,50,100,150,200,250,500,750,1000,1500,2000),
                     trans = trans) +
  # 配色方案
  scale_fill_manual(values = c("#FEE186", "#FEB24C", "#FD9E45",
                               "#FD8A3E", "#FC7637", "#FC6230", 
                               "#FC4E2A","#E33E29", "#CA2E28")) +
  scale_color_manual(values = c("#FEE186", "#FEB24C", "#FD9E45",
                               "#FD8A3E", "#FC7637", "#FC6230", 
                               "#FC4E2A","#E33E29", "#CA2E28")) +
  # 主题优化
  theme_minimal() +
  theme(legend.position = "bottom")

关键说明

  1. 替代geom_boxplot的原因:geom_boxplot仅支持围绕X中心对称的箱体宽度,无法实现X轴方向非对称的左右边界(x_q05到x_q95),因此改用基础图形元素手动构建。
  2. 图形元素分工:
    • geom_rect:绘制核心箱体区域,严格对应X的5%-95%分位数和Y的5%-95%分位数
    • geom_segment:分别绘制中位数线(贯穿箱体)和上下须(连接箱体与Y的2.5%/97.5%分位数)
    • geom_point:可选添加须的端点,提升数据可读性
  3. X轴变换适配:定义的modulus_trans(0.2)会自动应用到所有X坐标,确保箱体的左右边界准确对应变换后的x_q05和x_q95位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:38:10