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

如何为ggExtra边缘直方图设置颜色以匹配血压读数分类

解决方案

ggMarginal原生暂不支持直接为边际直方图按分组变量映射填充色,推荐使用patchwork包组合自定义绘制的主散点图和边际直方图,可完全匹配血压等级的颜色映射,实现步骤如下:

步骤1:数据预处理

首先把血压读数按等级分箱,给每个读数绑定对应的血压等级标签,示例代码:

library(ggplot2)
library(patchwork)

# 定义血压等级分界值(以下为收缩压参考标准,可替换为舒张压/平均压对应阈值)
bp_breaks <- c(-Inf, 90, 120, 130, 140, 180, Inf)
bp_labels <- c("Low", "Normal", "Elevated", "Stage 1", "Stage 2", "Crisis")

# 示例数据构造,替换为你的实际数据集即可
set.seed(123)
bp_data <- data.frame(
  time = 1:1000,
  sbp = rnorm(1000, mean = 130, sd = 20)
)
# 为数据添加血压等级列
bp_data$bp_level <- cut(bp_data$sbp, breaks = bp_breaks, labels = bp_labels, ordered_result = T)

# 统一自定义颜色映射,保证散点和直方图颜色完全一致
bp_colors <- c(
  "Low" = "#2196F3", 
  "Normal" = "#4CAF50", 
  "Elevated" = "#FFC107", 
  "Stage 1" = "#FF9800", 
  "Stage 2" = "#F44336", 
  "Crisis" = "#9C27B0"
)

步骤2:绘制主时间序列散点图

和常规ggplot2实现逻辑一致,按血压等级映射点的颜色:

main_plot <- ggplot(bp_data, aes(x = time, y = sbp)) +
  geom_point(aes(color = bp_level), alpha = 0.7, size = 2) +
  scale_color_manual(values = bp_colors) +
  labs(x = "时间", y = "收缩压(mmHg)", color = "血压等级") +
  theme_bw() +
  theme(
    legend.position = "bottom",
    plot.margin = margin(r = 0) # 右侧边距设为0,和直方图贴合
  )

步骤3:自定义绘制y轴边际直方图

直方图按血压等级映射填充色,隐藏不需要的轴元素保证和主图对齐:

margin_hist <- ggplot(bp_data, aes(y = sbp)) +
  geom_histogram(aes(fill = bp_level), binwidth = 2, alpha = 0.7) +
  scale_fill_manual(values = bp_colors) +
  # 隐藏冗余元素,保证和主图对齐
  theme_void() +
  theme(
    legend.position = "none",
    plot.margin = margin(l = 0) # 左侧边距设为0,和主图贴合
  ) +
  # 强制y轴范围和主图完全一致
  lims(y = ggplot_build(main_plot)$layout$panel_params[[1]]$y.range)

步骤4:拼合两张图输出

用patchwork设置宽度比例,输出最终可视化结果:

# 主图和直方图宽度比设为8:2,可根据实际展示需要调整
final_plot <- main_plot + margin_hist + plot_layout(widths = c(8, 2))
print(final_plot)

如果一定要使用ggMarginal实现,也可以通过修改grob对象的填充属性完成,但操作复杂度更高,不推荐日常分析场景使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:57:02