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

从笛卡尔坐标转三线坐标绘制三元图的R实现求助

R语言中笛卡尔坐标转三线坐标的方法及ggtern使用说明

一、笛卡尔坐标转三线坐标的实现

1. 手动计算转换

如果你的两个示踪剂测量值为x和y,首先需确保数据可归一化到三线坐标的约束(三个分量和为1或100)。假设第三个分量为z = 1 - x - y(已归一化至0-1范围),可通过以下公式完成坐标转换:

三线坐标(a,b,c)转笛卡尔坐标(x,y)

x <- b + 0.5 * c
y <- (sqrt(3)/2) * c

笛卡尔坐标(x,y)转三线坐标(a,b,c)

c <- (2 / sqrt(3)) * y
b <- x - 0.5 * c
a <- 1 - b - c

注:上述公式基于顶点为A(1,0)、B(0,1)、C(0,0)的三角坐标系,不同绘图系统的顶点位置可能略有差异,需根据实际调整。

2. 现成工具包函数

  • ternary包:提供直接的互转函数,可快速完成坐标转换:
    # 安装并加载包
    install.packages("ternary")
    library(ternary)
    
    # 笛卡尔转三线坐标
    cartesian_coords <- data.frame(x = c(0.2, 0.5), y = c(0.3, 0.1))
    ternary_coords <- CartesianToTernary(cartesian_coords$x, cartesian_coords$y)
    
    # 三线坐标转笛卡尔坐标
    ternary_coords <- data.frame(a = c(0.4, 0.3), b = c(0.2, 0.5), c = c(0.4, 0.2))
    cartesian_coords <- TernaryToCartesian(ternary_coords$a, ternary_coords$b, ternary_coords$c)
    
  • ggtern包:虽主打绘图,但内置坐标转换逻辑,若已有三个三线分量,可直接传入绘图函数,它会自动处理为笛卡尔坐标用于绘制三角图。

二、关于ggtern的坐标要求

你的理解正确:ggtern需要三线坐标的三个分量(三个变量满足a + b + c = 常数,通常为1或100)作为输入,而非直接接受两个笛卡尔坐标测量值。使用时需先根据两个示踪剂计算出第三个分量,再将三个变量传入ggtern()的aes()映射,示例如下:

install.packages("ggtern")
library(ggtern)

# 基于两个示踪剂计算第三个分量
df <- data.frame(x = c(0.2, 0.5, 0.3), y = c(0.3, 0.1, 0.4))
df$z <- 1 - df$x - df$y

# 绘制三角图
ggtern(data = df, aes(x = x, y = y, z = z)) +
  geom_point() +
  theme_bw()

内容的提问来源于stack exchange,提问作者Nadine El Nino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:12:22