r - ggtern:线(geom_segment)和平滑数据(geom_smooth_tern)之间的交集

标签 r ggplot2 data-visualization ggtern

我目前正在研究蒸发实验的可视化。我用 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 的减少)(基于实验数据)。

H2O 的直接减少可以完美地描述为两点之间的一条线。我正在使用 geom_segment。

我需要找到蒸发线与相边界的交点,以最终绘制从 P1 到交点的线。

Plot

你好,基督徒

最佳答案

基于@Onyambu 建议:

关键是将 optimise() 限制在 im 提供给蓝线模型的数据范围内 (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

关于r - ggtern:线(geom_segment)和平滑数据(geom_smooth_tern)之间的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50147661/

相关文章:

使用新列和 data.table 进行 Rbind

r - dplyr::select_if 可以同时使用 colnames 及其值吗?

r - 如何更改 ggplot2 密度图中的颜色?

R ggplot2改变轴的单位

r - 如何从R生成ascii “graphical output”?

r - 使用 dplyr 计算 95%-CI 的长度

r - 改变列表的逻辑

r - ggplot stat_* 函数在概念上是如何工作的?

python - 如何使用 matplotlib 创建多个饼图

javascript - 点图分布(频率计数)