ggtern:线段(geom_segment)与平滑数据(geom_smooth_tern)的交点

3

我目前正在进行一个蒸发实验的可视化工作。我使用ggtern和基于phreeqc模拟的数据绘制了一个三元相图(NaCl-Na2SO4-H2O)。相界(红/蓝)是平滑的数据点(geom_smooth_tern)。

> geom_smooth_tern(data=dataTernNaCl, aes(x=NaCl, y=H2O, z=Na2SO4), method = loess, se = FALSE, color = "blue")

#Dataframe
> select(dataTernNaCl, NaCl, Na2SO4, H2O)[324:329,]
# A tibble: 6 x 3
   NaCl     Na2SO4       H2O
  <dbl>      <dbl>     <dbl>
1 0.2503361 0.03098092 0.7186830
2 0.2502058 0.03123192 0.7185623
3 0.2500746 0.03148678 0.7184386
4 0.2499421 0.03174650 0.7183114
5 0.2498056 0.03201021 0.7181842
6 0.2496680 0.03227777 0.7180542

鉴于相图,我想可视化从某一点P1(基于实验数据)的蒸发路径(H2O减少)。 纯蒸发水可完全描述为2个点之间的直线。 我正在使用geom_segment。
我需要找到蒸发线与相界面的交点,最终从P1到交点绘制该线。

要找到交点,我们必须有两个方程式。请在这里查看是否有帮助。 - Onyambu
谢谢您的回复。遗憾的是,我还无法使predict()函数正常工作。 - Christian S.
你是如何绘制红线或蓝线的?它们的方程式是什么? - Onyambu
我使用了ggplots:geom_smooth_tern(data = dataTernNaCl,aes(x = NaCl,y = H2O,z = Na2SO4),method = loess,se = FALSE,color =“blue”)+ - Christian S.
dataTernNaCl是通过“phreeqc”程序模拟得到的数据框,其中包含大约2k-3k个NaCl、H2O、Na2SO4对。 - Christian S.
1个回答

1

根据@Onyambu的建议:

关键是将optimise()限制在我提供给蓝线模型(modelPhaseboundaryNaCl)的数据范围内。

#function evaporation line between from starting point | input = NaCl
funEvapLine = function(x){
y <- messwerteTern
m <- (y$Ausgang_Na2SO4Ende-y$Ausgang_Na2SO4)/(y$Ausgang_NaClEnde-y$Ausgang_NaCl)
n <- y$Ausgang_Na2SO4/(y$Ausgang_NaCl * m)
m*x+n-1
  }

#function NaCl phase boundary | only works in NaCl range | input = NaCl
modelPhaseBoundaryNaCl <- loess(Na2SO4 ~ NaCl, data=dataTernNaCl)
funNaClBorder <- function(x)predict(modelPhaseBoundaryNaCl, data.frame(NaCl = x))

#function Intersection EvapLine and NaCl phase boundary | input = NaCl | output = NaCl
NaClmin <- min(dataTernNaCl$NaCl)
NaClmax <- max(dataTernNaCl$NaCl)
g <- function(x)(funNaClBorder(x) - funEvapLine(x))
intersectionNaCl <- optimise(function(x)abs(g(x)), c(NaClmin,NaClmax))$min
intersectionNa2SO4 <- funEvapLine(intersectionNa2SO4)
intersectionH2O <- 1-(intersectionNaCl+intersectionNa2SO4)

intersection


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接