如何使用CSS和JavaScript绘制正态分布曲线(Bell曲线)
How to draw a Normal Distribution Curve (Bell curve) using CSS and JavaScript?
- 它不需要在数学上精确
- 它需要对称
- 它需要有一个颜色梯度
- 我需要在曲线上动态添加一个点。(但我想我可以我自己做,但如果有任何帮助,我们将不胜感激)
我是一个新手,这是我的错(我没有试图获得同情),我正在尽我所能做到这一点
我已经试着做了一段时间了。我只是无法在SVG中正确地获得上坡曲线,我试图将其键入并使用Inkscape,但我无法实现。
function NormalDensityZx(x, Mean, StdDev) {
var a = x - Mean;
return Math.exp(-(a * a) / (2 * StdDev * StdDev)) / (Math.sqrt(2 * Math.PI) * StdDev);
}
//----------------------------------------------------------------------------------------------
// Calculates Q(x), the right tail area under the Standard Normal Curve.
function StandardNormalQx(x) {
if (x === 0) // no approximation necessary for 0
return 0.50;
var t1, t2, t3, t4, t5, qx;
var negative = false;
if (x < 0) {
x = -x;
negative = true;
}
t1 = 1 / (1 + (0.2316419 * x));
t2 = t1 * t1;
t3 = t2 * t1;
t4 = t3 * t1
t5 = t4 * t1;
qx = NormalDensityZx(x, 0, 1) * ((0.319381530 * t1) + (-0.356563782 * t2) + (1.781477937 * t3) + (-1.821255978 * t4) + (1.330274429 * t5));
if (negative == true)
qx = 1 - qx;
return qx;
}
//----------------------------------------------------------------------------------------------
// Calculates P(x), the left tail area under the Standard Normal Curve, which is 1 - Q(x).
function StandardNormalPx(x) {
return 1 - StandardNormalQx(x);
}
//----------------------------------------------------------------------------------------------
// Calculates A(x), the area under the Standard Normal Curve between +x and -x
function StandardNormalAx(x) {
return 1 - (2 * StandardNormalQx(Math.abs(x)));
}
//----------------------------------------------------------------------------------------------
//Define values where to put vertical lines at
var verticals = [-1.4, -0.2, 1.2
];
/**
* Calculate data
*/
var chartData = [];
for (var i = -5; i < 5.1; i += 0.1) {
var dp = {
category: i,
value: NormalDensityZx(i, 0, 1)
};
if (verticals.indexOf(Math.round(i * 10) / 10) !== -1) {
dp.vertical = dp.value;
}
chartData.push(dp);
}
/**
* Create a chart
*/
var chart = AmCharts.makeChart("chartdiv", {
"type": "serial",
"theme": "light",
"dataProvider": chartData,
"precision": 2,
"valueAxes": [{
"gridAlpha": 0.2,
"dashLength": 0
}],
"startDuration": 1,
"graphs": [{
"balloonText": "[[category]]: <b>[[value]]</b>",
"lineThickness": 3,
"valueField": "value"
}, {
"balloonText": "",
"fillAlphas": 1,
"type": "column",
"valueField": "vertical",
"fixedColumnWidth": 2,
"labelText": "[[value]]",
"labelOffset": 20
}],
"chartCursor": {
"categoryBalloonEnabled": false,
"cursorAlpha": 0,
"zoomable": false
},
"categoryField": "category",
"categoryAxis": {
"gridAlpha": 0.05,
"startOnAxis": true,
"tickLength": 5,
"labelFunction": function(label, item) {
return '' + Math.round(item.dataContext.category * 10) / 10;
}
}
});
#chartdiv {
width: 100%;
height: 500px;
font-size: 11px;
}
<script src="https://www.amcharts.com/lib/3/amcharts.js"></script><script src="https://www.amcharts.com/lib/3/serial.js"></script>
<div id="chartdiv"></div>
我希望这对你有帮助。感谢
相关文章:
- 如何在d3力布局中使直线而不是曲线
- D3.js:设置贝塞尔曲线的动画
- 如何通过单击点之间的样条曲线来选择样条曲线中的序列
- 数据库中的动态样条曲线高图
- 画布:制作贝塞尔曲线绘制动画
- 鼠标悬停在贝塞尔曲线上
- jqplot图位于曲线下方
- 在Canvas中检测鼠标与闭合Bezier曲线形状的碰撞
- 在谷歌地理图中绘制两点之间的曲线
- html5画布变换和缓存渐变、曲线和旋转
- 如何制作一个函数,使用node.js计算图形曲线下的面积
- 带有jQuery的正弦曲线
- 在新框架上绘制图像,同时仍然使用P5.js中的利萨茹曲线
- 播放时更改WebAudio WaveShaper节点的曲线
- 在给定曲线的最大高度的情况下,获取二次曲线的 Y 值
- KineticJS - 创建带有渐变描边的样条曲线
- 在滚动上绘制一条曲线虚线 SVG
- 椭圆曲线加密与JS中的SJCL和Ruby中的OpenSSL
- 在 d3 力定向图中使用曲线
- 如何使用CSS和JavaScript绘制正态分布曲线(Bell曲线)