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

如何在ggtern三元图中绘制两个数据集的重叠密度图?

如何用ggtern绘制两个数据集的重叠三元密度图

没问题,我来一步步教你怎么用ggtern包在三元图里画出两个数据集的重叠密度图~首先得明确:三元图需要每个观测对应三个变量(分别对应三元图的三个轴,通常是比例或总和固定的数值),如果你目前的数据集只有单个变量(比如你贴的dataset1只有x列),得先补充另外两个变量或者确认数据结构哦。

1. 先搞定工具包

首先得安装并加载需要的R包——ggtern是画三元图的核心,dplyr用来快速整理数据:

# 没安装过的话先跑这行
install.packages(c("ggtern", "dplyr"))
# 加载包
library(ggtern)
library(dplyr)

2. 把两个数据集合并成方便绘图的格式

为了让ggtern能区分两个数据集,最好把它们合并成一个长格式数据框,加个分组列(比如叫dataset)来标记数据来源。假设你的两个数据集分别叫df1和df2,每个都有三元变量x、y、z:

# 给每个数据集打个标签
df1 <- df1 %>% mutate(dataset = "数据集1")
df2 <- df2 %>% mutate(dataset = "数据集2")

# 合并成一个数据框
combined_df <- bind_rows(df1, df2)

小提示:如果你的数据还没归一化(比如三个变量总和不是1),可以先做归一化处理,确保密度计算更准确:

combined_df <- combined_df %>%
  rowwise() %>%
  mutate(total = x + y + z,
         x = x/total, y = y/total, z = z/total) %>%
  ungroup()

3. 绘制重叠密度图

用ggtern()初始化三元图,然后用stat_density_tern()绘制密度区域,通过fill和color区分两个数据集,调整透明度让重叠区域清晰可见:

ggtern(data = combined_df, aes(x = x, y = y, z = z, fill = dataset, color = dataset)) +
  # 用多边形填充密度区域,alpha设置透明度让重叠部分可见
  stat_density_tern(geom = "polygon", alpha = 0.5, position = "identity") +
  # 自定义颜色,你也可以换成自己喜欢的颜色
  scale_fill_manual(values = c("数据集1" = "#2E86AB", "数据集2" = "#F24C00")) +
  scale_color_manual(values = c("数据集1" = "#2E86AB", "数据集2" = "#F24C00")) +
  # 添加标题和轴标签,按需修改
  labs(title = "两个数据集的重叠三元密度图",
       x = "X轴名称", y = "Y轴名称", z = "Z轴名称",
       fill = "数据集", color = "数据集") +
  # 调整主题,让图更好看
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5, size = 14))

关键参数说明

  • geom = "polygon":用填充多边形展示密度区域,如果只想画密度轮廓线,可以改成geom = "line"
  • alpha = 0.5:设置透明度,数值越小越透明,方便看清两个数据集的重叠部分
  • position = "identity":确保两个密度图直接重叠,不会被偏移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:04:23