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

如何使用ggplot将两个直方图分别以X轴、Y轴形式合并到同一图表?

如何将两个ggplot直方图按X/Y轴方向合并?

看起来你已经成功生成了年龄和体重的独立直方图,现在想要把它们组合成一个图,让年龄直方图对应X轴方向、体重直方图对应Y轴方向——这其实是很常见的边缘可视化需求,我给你两种实用的实现方法:

方法一:用ggExtra快速生成带边缘直方图的组合图**(推荐)**

ggExtra包专门用来给ggplot图表添加边缘的分布可视化,正好能满足你的需求,而且代码非常简洁:

  1. 先安装并加载包:
install.packages("ggExtra")
library(ggExtra)
  1. 先创建年龄和体重的散点图作为主图(如果不需要散点,后面可以调整),然后添加边缘直方图:
# 主散点图(展示年龄和体重的关联)
main_scatter <- ggplot(chol, aes(x = AGE, y = WEIGHT)) +
  geom_point(alpha = 0.3) +
  labs(x = "Age", y = "Weight")

# 添加边缘直方图:顶部是你的年龄直方图(对应X轴),右侧是体重直方图(对应Y轴)
combined_plot <- ggMarginal(
  main_scatter,
  type = "histogram",
  # 配置X轴边缘的年龄直方图,和你原来的plot1参数一致
  xparams = list(breaks = seq(20, 50, by = 2), col = "red", fill = "green", alpha = 0.2),
  # 配置Y轴边缘的体重直方图,沿用你plot2的设置
  yparams = list(fill = "gray", alpha = 0.5)
)

# 查看最终组合图
combined_plot

这个方法生成的图,顶部的年龄直方图对应X轴方向,右侧的体重直方图对应Y轴方向,中间的散点还能帮你直观看到两个变量的关联,非常实用。

方法二:用cowplot手动自定义布局

如果你不需要中间的散点,只想单纯把两个直方图按X/Y轴方向摆放,可以用cowplot手动调整布局,灵活性更高:

  1. 安装并加载包:
install.packages("cowplot")
library(cowplot)
  1. 先旋转体重直方图,让它对应Y轴方向,然后组合布局:
# 旋转体重直方图,使其Y轴为体重,计数沿水平方向(对应X轴方向的计数)
rotated_weight_plot <- plot2 +
  coord_flip() +
  labs(title = "Histogram for Weight (Y-axis)") +
  xlim(0, 50)  # 旋转后X轴对应原来的Y轴范围

# 用plot_grid布局:把年龄直方图放在下方(X轴方向),旋转后的体重直方图放在右侧(Y轴方向)
combined_plot <- plot_grid(
  NULL, rotated_weight_plot,
  plot1, NULL,
  ncol = 2, nrow = 2,
  rel_widths = c(3, 1),  # 调整主图和侧边图的宽度比例
  rel_heights = c(1, 3)  # 调整顶部和底部图的高度比例
)

# 查看组合图
combined_plot

这样你可以完全控制两个图的位置、大小比例,甚至可以在中间区域添加其他内容。

小提示

  • 如果不需要散点图,方法二更适合;如果想同时展示变量关联,方法一的可视化效果更完整。
  • 确保你的ggplot2是最新版本,避免出现函数参数不兼容的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:18:49