当前位置:网站首页>How to create an interactive kernel density chart
How to create an interactive kernel density chart
2020-11-06 22:21:00 【roffey】
Highcharts It's a pure JavaScript A library of charts compiled , For you Web Website 、Web Applications provide intuitive 、 Interactive charts . Currently, broken lines are supported 、 curve 、 Area 、 Regional plot 、 Bar charts 、 Bar chart 、 The pie chart 、 Scatter plot 、 Angle measurement chart 、 Area map 、 Regional curve arrangement 、 Column arrangement 、 There are dozens of chart types, such as polar charts .
Click to download Highcharts The latest trial version
Kernel density estimation is a useful statistical method , Used to estimate the overall shape of the distribution of random variables . let me put it another way , Nuclear density estimates ( Also known as KDE) Can help us “ smooth ” And exploration does not follow any typical probability density distribution ( For example, normal distribution , Binomial distribution, etc ) The data of .
In this tutorial , We're going to show you how to Javascript Create interactive kernel density estimation and use Highcharts Library drawing results .
Let's first explore KDE chart ; Then we're going to delve into the code .
The following demonstration shows the Gaussian kernel density estimation for random data sets :
This chart helps us estimate the probability distribution of random data sets , And we can see that the data is mainly concentrated at the beginning and end of the chart .
Basically , For each red data point , We draw a Gaussian kernel function in orange , Then sum all the kernel functions together , Create density estimates in blue ( Please see the demo):
By the way , There are many kernel function types , For example, Gauss , Unified ,Epanechnikov etc. . We're using a Gaussian kernel , Because it provides a smooth pattern .
The mathematical expression of Gaussian kernel is :
Now? , You have an idea of what the kernel density estimation looks like , Let's take a look at the code behind it .
There are four main steps in the code :
- Create a Gaussian kernel function .
- Processing density estimators .
- Dealing with kernel points .
- Plot the entire data point .
Gaussian kernel
The following code represents the Gaussian kernel function :
function GaussKDE(xi, x) {
return (1 / Math.sqrt(2 * Math.PI)) * Math.exp(Math.pow(xi - x, 2) / -2);
}
among x Represents the main data ( Observed value ),xi Represents the range and density estimation function of the rendering kernel . In our case ,xi The scope is 88 To 107, To ensure coverage 93 To 102 The range of observational data for .
Density estimation point
Here's how to recycle GaussKDE() Array representation of functions and ranges to create density estimators
xiData:
//Create the density estimate
for (i = 0; i < xiData.length; i++) {
let temp = 0;
kernel.push([]);
kernel[i].push(new Array(dataSource.length));
for (j = 0; j < dataSource.length; j++) {
temp = temp + GaussKDE(xiData[i], dataSource[j]);
kernel[i][j] = GaussKDE(xiData[i], dataSource[j]);
}
data.push([xiData[i], (1 / N) * temp]);
}
Kernel point
Only if you want to show kernel points ( Orange chart ) You need to perform this step when . otherwise , You are already satisfied with the density estimation steps . This is the code that handles the data points of each kernel :
//Create the kernels
for (i = 0; i < dataSource.length; i++) {
kernelChart.push([]);
kernelChart[i].push(new Array(kernel.length));
for (j = 0; j < kernel.length; j++) {
kernelChart[i].push([xiData[j], (1 / N) * kernel[j][i]]);
}
}
Basically , This loop just adds the scope xiData To kernel Each array that has been processed in the density estimation step .
Draw points
After processing all the data points , You can use Highcharts Rendering series . Density estimates and kernels are spline type , The observations are plotted as scatter plots :
Highcharts.chart("container", {
chart: {
type: "spline",
animation: true
},
title: {
text: "Gaussian Kernel Density Estimation (KDE)"
},
yAxis: {
title: { text: null }
},
tooltip: {
valueDecimals: 3
},
plotOptions: {
series: {
marker: {
enabled: false
},
dashStyle: "shortdot",
color: "#ff8d1e",
pointStart: xiData[0],
animation: {
duration: animationTime
}
}
},
series: [
{
type: "scatter",
name: "Observation",
marker: {
enabled: true,
radius: 5,
fillColor: "#ff1e1f"
},
data: dataPoint,
tooltip: {
headerFormat: "{series.name}:",
pointFormat: "<b>{point.x}</b>"
},
zIndex: 9
},
{
name: "KDE",
dashStyle: "solid",
lineWidth: 2,
color: "#1E90FF",
data: data
},
{
name: "k(" + dataSource[0] + ")",
data: kernelChart[0]
},... ]
});
Now? , You are going to explore your own data using the function of the kernel density estimation map .
Feel free to share your comments or questions in the comments section below .
版权声明
本文为[roffey]所创,转载请带上原文链接,感谢
边栏推荐
- The use of Xunwei imx6 development board device tree kernel menuconfig
- 小熊派开发板实践:智慧路灯沙箱实验之真实设备接入
- What are the highlights of Huawei mate 40 series with HMS?
- QT audio and video development 46 video transmission UDP version
- image operating system windows cannot be used on this platform
- 迅为-iMX6ULL开发板上配置AP热点
- 10000! Ideal car recalls all defective cars: 97 accidents have occurred and losses will be expanded
- Call analysis of start method in JNI thread and callback analysis of run method
- 非易失性MRAM存储器应用于各级高速缓存
- The method of local search port number occupation in Windows system
猜你喜欢
Introduction to Huawei cloud micro certification examination
Countdown | 2020 PostgreSQL Asia Conference - agenda arrangement of Chinese sub Forum
Reserved battery interface, built-in charge and discharge circuit and electricity meter, quickly help easily handle hand-held applications
#JVM 类加载机制
List to map (split the list according to the key, and the value of the same key is a list)
The native API of the future trend of the front end: web components
【涂鸦物联网足迹】物联网基础介绍篇
Why is quicksort so fast?
How much disk space does a file of 1 byte actually occupy
2020-08-14:数据任务的执行引擎用的哪些?
随机推荐
Exclusive interview with Alibaba cloud database for 2020 PostgreSQL Asia Conference: Zeng Wenjing
Qt音视频开发46-视频传输UDP版
Practice of Xiaoxiong school development board: real equipment access of smart street lamp sandbox experiment
超高频RFID医疗血液管理系统应用
[graffiti Internet of things footprints] panoramic introduction of graffiti cloud platform
Introduction to Huawei cloud micro certification examination
C language I blog assignment 03
Why is quicksort so fast?
Countdown | 2020 PostgreSQL Asia Conference - agenda arrangement of Chinese sub Forum
Detect certificate expiration script
QT audio and video development 46 video transmission UDP version
【涂鸦物联网足迹】涂鸦云平台全景介绍
Unexpected element.. required element
win7 APPCRASH(解决方法)(转)
Characteristics of magnetic memory chip STT-MRAM
C calls SendMessage to refresh the taskbar icon (the icon does not disappear at the end of forcing)
New features of vue3
August 14, 2020: what are the execution engines for data tasks?
How to start the hidden preferences in coda 2 on the terminal?
2020-09-04: do you understand the function call convention?