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

如何在R中让geom_pointdensity散点密度图并排并共享同范围图例?

在R中实现geom_pointdensity()子图并排并共享图例

当然可以实现,下面分两种常见场景给出具体解决方案:

场景1:同一数据集按分组变量生成子图(用facet)

如果你的数据是同一数据集、需要按某个分组变量拆分展示,直接用facet_wrap或facet_grid即可,天然支持共享图例,只需手动统一密度刻度范围确保一致性。

示例代码:

library(ggplot2)
library(ggpointdensity)
library(dplyr)

# 构造示例数据
set.seed(123)
df <- bind_rows(
  data.frame(x = rnorm(1000), y = rnorm(1000), group = "组1"),
  data.frame(x = rnorm(1000, mean = 2), y = rnorm(1000, mean = 2), group = "组2")
)

# 绘制并排子图并共享图例
ggplot(df, aes(x = x, y = y)) +
  geom_pointdensity() +
  facet_wrap(~group, nrow = 1) + # 横向并排
  scale_color_viridis_c(
    limits = c(0, max(df$..density..)), # 统一密度范围
    name = "点密度"
  )

场景2:不同数据集生成独立子图(用patchwork拼接)

如果是完全独立的多个数据集,需要分别绘图后用patchwork包拼接,核心是提前统一所有子图的密度刻度范围,再合并图例。

示例代码:

library(ggplot2)
library(ggpointdensity)
library(patchwork)

# 构造两个独立数据集
set.seed(456)
df1 <- data.frame(x = rnorm(1500), y = rnorm(1500))
df2 <- data.frame(x = rnorm(1000, mean = 1.5), y = rnorm(1000, mean = -1))

# 提前计算所有数据集的密度极值,确定统一范围
get_density_range <- function(data) {
  p <- ggplot(data, aes(x, y)) + geom_pointdensity()
  dens_data <- layer_data(p)
  c(min(dens_data$density), max(dens_data$density))
}

dens_ranges <- c(get_density_range(df1), get_density_range(df2))
min_dens <- min(dens_ranges)
max_dens <- max(dens_ranges)

# 分别绘制子图,统一刻度范围
p1 <- ggplot(df1, aes(x = x, y = y)) +
  geom_pointdensity() +
  scale_color_viridis_c(limits = c(min_dens, max_dens), name = "点密度") +
  theme(legend.position = "none") # 隐藏子图图例

p2 <- ggplot(df2, aes(x = x, y = y)) +
  geom_pointdensity() +
  scale_color_viridis_c(limits = c(min_dens, max_dens), name = "点密度")

# 拼接子图并共享图例
p1 + p2 + 
  plot_layout(guides = "collect") + # 合并共享图例
  plot_annotation(title = "共享密度刻度的散点密度图")

关键注意点

  • 两种方法的核心都是统一颜色刻度的limits参数,确保所有子图的密度映射范围一致,避免颜色对比失真。
  • patchwork支持灵活调整子图比例、添加共同标题/注释,适合复杂的子图组合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:40:01