echart绘制直方图+正态分布曲线

  • 效果展示
  • echart
  • 细节

效果展示

echart

index.html代码

<!DOCTYPE html>
<html lang="zh-CN"><style>* {margin: 0;padding: 0;}#chart-container {position: relative;height: 100vh;overflow: hidden;}body {background: #12141e;background-size: cover;color: #666;font-size: 0.1rem;font-family: "微软雅黑";}</style><head><meta charset="utf-8" /><title>Basic Line Chart - Apache ECharts Demo</title><link rel="stylesheet" href="./style.css" /></head><body><div id="chart-container"></div><script src="https://fastly.jsdelivr.net/npm/echarts@5.4.1/dist/echarts.min.js"></script><script src="https://unpkg.com/mathjs/lib/browser/math.js"></script><script src="./index.js"></script></body>
</html>

index.js代码

var dom = document.getElementById("chart-container");
var myChart = echarts.init(dom, null, {renderer: "canvas",useDirtyRect: false
});
var app = {};//正态分布计算
function func(x, u, a) {return ((1 / Math.sqrt(2 * Math.PI)) *a *Math.exp((-1 * ((x - u) * (x - u))) / (2 * a * a)));
}var data = ["22.08","22.08","22.08","22.08","22.08","22.07","22.07","22.07","22.06","22.06","22.06","22.06","22.04","22.04","22.04","22.02","22.02","22.02","22.02","22.00","22.00","22.00","22.00","22.00","22.00","21.99","21.99","21.99","21.99","21.99","21.99","21.99","21.99","21.99","21.99","21.98","21.98","21.98","21.98","21.98","21.98","21.98","21.98","21.98","21.98","21.98","21.98","21.98","21.98","21.98","21.97","21.97","21.97","21.97","21.97","21.97","21.97","21.97","21.97","21.97","21.97","21.97","21.97","21.96","21.96","21.96","21.96","21.96","21.96","21.96","21.95","21.95","21.95","21.95","21.95","21.95","21.95","21.95","21.95","21.95","21.94","21.94","21.94","21.94","21.93","21.93","21.93","21.93","21.93"
];
var xMin = 21; //LowLimit
var xMax = 23; //UpLimit
var mean = math.mean(data); //平均值  计算方法来自math.js
var stdev = math.std(data); //方差
var threeSigUp = mean + 3 * stdev;
var threeSigLow = mean - 3 * stdev;
//数据升序排序
const dataSec = data.sort((a, b) => {return a - b;
});
//计算频数
var resNum = {};
for (var m = 0; m < dataSec.length; m++) {var key = parseFloat(dataSec[m]);if (parseFloat(key) === 0) continue;if (resNum[key]) resNum[key] += 1;else resNum[key] = 1;
}
var xArr = []; //横坐标值
var fArr = []; //频数
var yArr = []; //正态值for (var k in resNum) {xArr.push(parseFloat(k));
}
xArr = xArr.sort((a, b) => {return a - b;
});
//console.log(xArr);//计算x值对应的频数
for (var i = 0; i < xArr.length; i++) {var xNy = [xArr[i], resNum[xArr[i]]];fArr.push(xNy);
}//计算x值对应的正态分布值
var distance = xMax - xMin; //为了更好看,设置正态曲线起止位置
for (var j = xMin + distance / 4; j < xMax - distance / 4; j += 0.01) {var xy = [j, func(j, mean, stdev)];yArr.push(xy);
}var option;
option = {//backgroundColor: "#12141e",tooltip: {trigger: "axis",axisPointer: {type: "shadow"}},legend: {orient: "vertical",x: "right",y: "top",top: "5px",data: ["频数", "正态分布"],textStyle: {color: "rgba(255,255,255,1)",fontSize: "12"}},grid: {left: "2%",top: "18px",right: "2%",bottom: "2%",containLabel: true},xAxis: [{type: "value",min: xMin,max: xMax,axisLabel: {textStyle: {color: "rgba(255,255,255,1)",fontSize: 10}},axisLine: {show: true,lineStyle: {color: "rgba(255,255,255,1)"}},splitLine: {show: false}}],yAxis: [{type: "value", //数值轴name: "正态曲线",position: "right",axisTick: { show: true },axisLine: {show: false,lineStyle: {color: "rgba(255,255,255,1)"}},axisLabel: {show: true,textStyle: {color: "rgba(255,255,255,1)",fontSize: 10}},splitLine: {show: false}},{type: "value",name: "频数",position: "left",axisLabel: {//formatter: '{value} %'show: true,textStyle: {color: "rgba(255,255,255,1)",fontSize: "12"}},axisTick: {show: true},axisLine: {show: true,lineStyle: {color: "rgba(0,0,0,.1)",width: 1,type: "solid"}},splitLine: {lineStyle: {color: "rgba(255,255,255,.3)"}}}],series: [{name: "正态分布",type: "line",smooth: true,yAxisIndex: 0,symbol: "circle",symbolSize: 5,showSymbol: false,lineStyle: {normal: {color: "#ceb664",width: 2}},itemStyle: {normal: {color: "#ceb664",borderColor: "rgba(221, 220, 107, .1)",borderWidth: 10}},data: yArr,markLine: {symbol: ["none"],lineStyle: {type: "dotted",color: "yellow"},itemStyle: {normal: {show: true,color: "black"}},label: {show: true,position: "end"},data: [{name: "3σ",xAxis: threeSigLow.toFixed(2),label: {show: true,formatter: "3σ"}},{name: "3σ",xAxis: threeSigUp.toFixed(2),label: {show: true,formatter: "3σ"}}]}},{name: "频数",type: "bar",yAxisIndex: 1,xAxisIndex: 0,barWidth: 8,barGap: 1,symbol: "solid",symbolSize: 5,showSymbol: true,itemStyle: {normal: {color: "#0184d5",opacity: 1,barBorderRadius: 3}},data: fArr,markLine: {symbol: ["none"],lineStyle: {type: "dotted",color: "red"},itemStyle: {normal: {show: true,color: "black"}},label: {show: true,position: "middle"},data: [{name: "LowLimit",xAxis: xMin.toFixed(2),label: {show: true,formatter: "Low"}},{name: "High",xAxis: xMax.toFixed(2),label: {show: true,formatter: "High"}}]}}]
};if (option && typeof option === "object") {myChart.setOption(option);
}window.addEventListener("resize", myChart.resize);

细节

刚开始x轴设置为类目轴,直方图可以显示,但是加入正态曲线展示效果不是很理想,为了能更好显示频数与正态曲线,所以 x轴,y轴都采用了数值轴,其对应的y轴数组fArr与yArr中存放的值为[x,y]。

echart绘制直方图+正态分布曲线相关推荐

  1. EChart绘制风速风向曲线分析图

    1.获取ECharts 在 ECharts 的 GitHub 上下载最新的 release 版本,解压出来的文件夹里的 dist 目录里可以找到最新版本的 echarts 库. 2.引入ECharts ...

  2. python画直方图成绩分析-使用Python绘制直方图和正态分布曲线

    本文主要介绍两个内容: 如何使用记事本生成包含某一数据集的CSV文件: 如何使用Python绘制给定数据集的直方图和正态分布曲线. 1. 使用记事本创建CSV文件 ① 新建一个文本文件,打开后输入数据 ...

  3. python导入数据画直方图加正态曲线_使用Python绘制直方图和正态分布曲线

    原博文 2020-03-20 22:01 − 本文主要介绍两个内容: 如何使用记事本生成包含某一数据集的CSV文件: 如何使用Python绘制给定数据集的直方图和正态分布曲线. 1. 使用记事本创建C ...

  4. python绘制正态分布曲线

    场景:已知mean和variance,绘制正态分布曲线. import numpy as np import matplotlib.pyplot as plt import pandas as pd ...

  5. Matplotlib复习(1)——绘制三角函数曲线、正态分布曲线、圆锥曲线、极坐标方程(心形线、玫瑰线、阿基米德螺线)、3D图(球、马鞍面)

    文章目录 0 前置 1 基础API--绘制三角函数曲线 2 图例.注释.文本--绘制正态分布曲线 3 轮廓--绘制圆锥曲线 4 绘制极坐标方程(心形线.玫瑰线.阿基米德螺线) 5 3D图(球.马鞍面) ...

  6. matlab绘制正态分布曲线(高斯隶属度函数)

    在matlab中提供了gaussmf函数,可以利用该函数进行正态分布曲线的绘制. 正态分布公式: gaussmf的语法: y = gaussmf(x,[sig c]) 其中 sig: 指代正态分布的标 ...

  7. Python数据挖掘:绘制直方图,设置上下限和步长,绘制子图

    有任何问题欢迎在评论区提出! 绘制直方图: ''' 来源:天善智能韦玮老师 课堂笔记 作者:Dust 直方图hist某一段数据出现的频数 ''' import numpy as npy import ...

  8. python画直方图代码-Python使用Plotly绘图工具,绘制直方图

    今天我们再来讲解一下Python使用Plotly绘图工具如何绘制直方图 使用plotly绘制直方图需要用到graph_objs包中的Histogram函数 我们将数据赋值给函数中的x变量,x = da ...

  9. python绘制简单直方图-python plotly绘制直方图实例详解

    python plt怎么绘制直方图 # /usr/bin/python# -*- coding: utf-8 -*-import numpy as npfrom matplotlib import p ...

最新文章

  1. 计算机在医疗方面的应用与前景,计算机在医疗卫生领域应用现状及前景.docx
  2. 启动tomcat时jmx port被占用
  3. 综述丨七场高端报告,带你大视角看人工智能发展
  4. 洛谷P3953 逛公园(dp 拓扑排序)
  5. It is possible that this issue is resolved by uninstalling an existi
  6. 怎样进入pe重建硬盘
  7. 安卓入门程序《发短信》
  8. 为什么你从来没做过发起人?
  9. 计算机应用决策支持系统,计算机决策支持系统技术及应用研究
  10. L1-062 幸运彩票 (15 分)
  11. Linux操作系统文件链接问题
  12. python实现洗牌算法_【Python】洗牌算法及 random 中 shuffle 方法和 sample 方法浅析...
  13. 软考高级:信息系统项目管理师-计算机信息系统集成高级项目经理挂靠
  14. UE4雷达图(纯蓝图)
  15. 「深度」VR家装开局完美,但适度挤掉一点水分或许更利于它的发展
  16. 打开计算机页面只有上面一半,我电脑打开网页总是打开一半,不知道是为什么,请高手指教,谢谢!...
  17. java 图形化编程_java图形化编程
  18. java 判断当前月天数
  19. 组织级项目管理成熟度模型 OPM3模型
  20. pwd 显示当前目录

热门文章

  1. Python学习:利用python解析GPS模块数据,并生成可视化地图显示
  2. 厉害了!全国多地5G/4G基站共建共享落地图集来啦!
  3. java sts_Java Web入门学习(一) STS与Tomcat配置
  4. 虚拟化台式机还是塔式服务器,Gpu主机还是塔式服务器
  5. 【图解例说机器学习】模型选择:偏差与方差 (Bias vs. Variance)
  6. 油管频道video界面,不借助webdriver,怎么触发下一页
  7. [软件笔记------AutoCAD 2007]
  8. windows xp 超级模仿windows Vista全攻略 一模一样的感觉
  9. 数据库同步软件开发——工作日志
  10. phpstudy配置虚拟主机