转换达文波特图

Converting davenport diagram

我是一家医院教育部门的实习生,我的任务是将达文波特图变成一个有效的交互式工具,以便教师可以在他们的演示中使用它。


我没有background/knowledge这个水平的化学或方程求解。


有问题的达文波特图: http://imgur.com/Lo87Aib(post 张图片没有足够的声誉)

我已经使用它几天了,并取得了很大的进步,我使用 Flot.js 结合 jQuery 实现了几乎相同的克隆,与能够拖放数据点,​​还可以使用用户输入和更改点。

从昨天开始我遇到了障碍,我用谷歌搜索了很多东西并访问了许多基于化学的网站只是为了理解这个图表使用的公式。该图使用 Henderson-Hasselbalch 方程 (Link 1).

现在我的第一个问题是,我可以使用简单的基于坐标的系统绘制数据点,即 x = 7.20,y = 8,因此患者患有代谢性酸中毒。然而,我什至不知道如何开始建立一个也包含 PCO2 值(红线)的公式。

我的第二个问题是,只有解决了第一个问题,我如何将那个公式转换成Flot.js使用的坐标系?

即使只是轻轻地把我推向正确的方向也会对我有很大帮助


编辑 1:(工作解决方案)

我设法使用 Mark 提供的示例构建了一个工作工具。因为我只需要绘制一个点,所以我将公式从各自的 for 循环中取出。

            $(".davenportInput").change(function() {
                // replace the , with . so Flot/math can actually use it
                var iX = $("#inputX").val().replace(',','.'); // pH
                //var iY = $("#inputY").val();  // HCO3/HCOmm
                var iA = $("#inputA").val(); // PCO2

                var HCOmm = 0.03 * iA * Math.pow(10, iX - 6.1);
                var pH = 6.1 + Math.log10(HCOmm / (0.03 * iA));

                $("#inputY").val(HCOmm.toFixed());

                updatePoint(pH, HCOmm); // Draws the x,y coordinates
            }); 

那些红线是等值线。为了绘制它们,您可以根据具有足够粒度的方程改变自变量以产生近似曲线的点。

根据 wikipedia,你的 Henderson–Hasselbalch 血液方程为:

pH = 6.1 + log(HCO3MM/(0.03*PCO2))

其中 pH 是 x,HCO3MM 是您的 y,PCO2 是每条曲线的常数。我猜你会想改变 x 所以求解 HCO3MM 的方程式会产生:

HCO3MM = 0.03*PCO2*10^(pH-6.1)

现在让我们创建 javascript 函数以使用此函数生成曲线:

// minPH to maxPH is range of x-axis
// PCO2 is constant for curve
function HHIsoPleth(minPH, maxPH, PCO2){
  var isoPleth = [];
  for (var i = minPH; i < maxPH; i += 0.01){ // produce points every 0.01 pH
    HCOmm = 3 * PCO2 * Math.pow(10, i-8.1);
    isoPleth.push([i,HCOmm]);
  }
  return isoPleth;
}

我们现在可以调用此函数来构建多条等值线曲线:

var data = [];
data.push(HHIsoPleth(7.0, 7.6, 20));
data.push(HHIsoPleth(7.0, 7.6, 40));
data.push(HHIsoPleth(7.0, 7.6, 60));

flot 绘制此图产生(示例 here):