从笛卡尔坐标转三线坐标绘制三元图的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
相关产品推荐
相关产品推荐

