我是一家医院教育部门的实习生,我的任务是将达文波特图变成一个可用的交互式工具,以便老师可以在演示中使用它。
<小时/>我没有这个级别的化学或方程求解背景/知识。
<小时/>有问题的达文波特图: /image/LTphs.jpg (没有足够的声誉来发布图片)
我已经研究了几天,并取得了很多进展,我将 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 ,您的血液亨德森-哈塞尔巴尔赫方程为:
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 ):
关于jquery - 转换达文波特图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28345621/