Excursions with plotting big data
Posted on November 10, 2021
Tags: javascript
1 Tensorfail extraction
- Is tf.js a viable numerical library for extract and cleaning data on browser side?
- Big no, everything turns into floating points and promise objects.
let range = n => [...Array(n).keys()]
const main = async () => {
const rawdata = await fetch("https://www.bigdata....").then(response => response.text())
const inter = window.atob(rawdata)
const jsondata = JSON.parse(inter)["candles"]
//const yaxis = jsondata.map(x => x["close"])
//const xaxis = range(yaxis.length)
//tensorfail attempt at extract x and y data
const tfDF = tf.data.array(jsondata)
//Even logging the output requires a promise
await tfDF.take(1).forEachAsync(e => console.log(e))
//failed to even extract closing price
const closing = await
.mapAsync(x => new Promise(function(resolve){
tfDFsetTimeout(() => {
resolve(x["close"]);
, Math.random()*1000 + 500);
};
}))
//adds small floating point error
const tf_xaxis = await tf.linspace(0,closing.size,closing.size)
const xaxis = await tf_xaxis.array() //conversion to array is a promise
}
2 Plotting Competitors
- Echarts
- Chartjs
- uplot
2.1 Simple line graph
- Echarts - pass
- Chartjs - failed
- uplot - pass
let range = n => [...Array(n).keys()]
const main = async () => {
const rawdata = await fetch("https://raw.githubusercontent.com/userJY/stuff/main/example").then(response => response.text())
const inter = window.atob(rawdata)
const jsondata = JSON.parse(inter)["candles"]
const ydata = jsondata.map(x => x["close"])
const xdata = range(ydata.length)
let chartDom = document.querySelector('main');
let myChart = echarts.init(chartDom);
let option;
= {
option xAxis: {
type: 'category',
data: xdata
,
}yAxis: {
type: 'value'
,
}series: [
{data: ydata,
type: 'line'
},
]tooltip: {
trigger: 'axis',
triggerOn: 'mousemove|click',
axisPointer: {
type: 'cross',
animation: false,
label: {
backgroundColor: '#ccc',
borderColor: '#aaa',
borderWidth: 1,
shadowBlur: 0,
shadowOffsetX: 0,
shadowOffsetY: 0,
color: '#222'
},
}formatter: function (params) {
//console.log(params)
return (
0].name +
params['<br />' +
0].value +
params['%'
;
)
},
}
;
}
&& myChart.setOption(option); option
2.1.1 Draw a line
: [{
graphicelements: [{
id: 'small_circle',
type: 'line',
z: 100,
shape:{
x1:0,
y1:0,
x2:50,
y2:50
,
}style: {
fill: 'rgba(0, 140, 250, 0.5)',
stroke: 'rgba(0, 50, 150, 0.5)',
lineWidth: 2,
}
}] }]