Javascript 在数组问题中存储高位图表
我在一个循环中动态绘制了许多highchart,并将每个highchart推送到一个数组中。这样,在单击外部按钮时,我可以导出图表。但在将图表推送到数组时,只有最后一个条目正确设置了选项 我提到一把小提琴,它建议复制选项<代码>[Javascript 在数组问题中存储高位图表,javascript,jquery,arrays,json,highcharts,Javascript,Jquery,Arrays,Json,Highcharts,我在一个循环中动态绘制了许多highchart,并将每个highchart推送到一个数组中。这样,在单击外部按钮时,我可以导出图表。但在将图表推送到数组时,只有最后一个条目正确设置了选项 我提到一把小提琴,它建议复制选项[][2] fiddle在所有图表上绘制了相同的系列数据。如果填充的每个图表的数据不同,如何解决此问题。提前谢谢你的帮助 使问题更加明确: 数据在循环中动态填充。我的代码逻辑如下: counter i; setInterval(function() { //logic to
][2]
fiddle在所有图表上绘制了相同的系列数据。如果填充的每个图表的数据不同,如何解决此问题。提前谢谢你的帮助
使问题更加明确:
数据在循环中动态填充。我的代码逻辑如下:
counter i;
setInterval(function() {
//logic to populated data...
//It is a multiline chart, so three sets of arrays are populated.
//filling data1[], data2[] and data3[] .
drawChart(data1, data2, data3);
if(condition true) clearInterval();
i++;
});
drawChart(data1, data2, data3) {
var chart = new Highcharts.Chart({
title: {
text: "title",
},
xAxis: {
categories: [1,2,3,4...],
},
series: [{
type: 'line',
data: data1,
}, {
type: 'line',
data: data2,
}, {
type: 'line',
data: data3,
},
});
chartArray.push(chart);
}
这个chartArray就是我提到的只正确获取最后一个条目的地方。每次使用新图表时,都需要定义选项。每次创建新图表时重新初始化原始选项
const options = [...Array(5)].map(() => {
const originalOptions = {
series: [{
data: [], // some random data
type: 'column'
}]
}
return Object.assign(originalOptions)
})
更新:
要动态重新填充图表,必须初始化空图表,然后在填充数据时添加新的序列+重画
您的重画函数将如下所示:
var i = 0;
var data = [];
var chart = new Highcharts.Chart('container',{
series: []
});
var interval = setInterval(function() {
i++;
data[i] = [i*10 + 1, i*10+2, i*10+3];
drawChart(data[i]);
if(i > 2) clearInterval(interval);
},1000);
function drawChart(data) {
var series = {
type: 'line',
data: data
}
chart.addSeries(series, false);
chart.redraw();
}
将图表选项存储在
数组中
然后映射到初始化每个选项的Highchart
var chartary=[];
功能绘图图(数据1、数据2、数据3、i){
//为图表创建容器
const el=document.createElement('div');
document.body.appendChild(el.setAttribute)(“id”,“container”+i);
//创建图表
var图表=新的高点图表。图表(el{
系列:[{
键入:“行”,
数据:数据1,
}, {
键入:“行”,
数据:数据2,
}, {
键入:“行”,
数据:数据3,
}]
});
chartArray.push(图表);
log(chartArray);
}
var计数器=0;
var delayTime=2000;
var timer=setInterval(函数(){
VarData1=[30,70,50];
VarData2=[40,70,60];
VarData3=[10,90,20];
绘图图(数据1、数据2、数据3、计数器);
如果(计数器==2){
清除间隔(计时器);
}
计数器++;
},延迟时间)代码>
要将HTML打印为PDF您可以使用此软件“wkhtmltopdf”
在Linux中,您需要使用以下命令:
sudo apt-get install wkhtmltopdf
在许多语言中有许多基于“wkhtmltopdf”的库,因此您可以使用它
PHP库:要创建图表,必须传递一个HTML元素,该元素将作为图表容器。在您的代码中,缺少什么。查看我准备复制此问题的演示:
代码:
最后,您希望导出数据库列中的数据,还是希望导出为文件(即pdf、csv等)?(您想要的选项)似乎是id
的问题。你能不能也发布导出图表方法。@ShantanuSharma将导出为单个pdf。我发现,如果我们只使用同一个容器,则在克隆选项后会出现此问题。是否仍然可以对所有图表重复使用同一容器。数据以一定间隔动态填充。是否希望在填充所有数据时显示图表,还是在填充每个集合时显示图表?是否在定期填充每个集合时显示图表。请查看包含的更新代码。因此,在本例中,您需要重新绘制图表。请参阅此处更新的答案。存储图表的数组是哪一个?而且这里只填充了一个图表,所有的图表选项都没有包含在这里的代码中,所以我没有提到renderTo容器选项。无论如何,我的要求是在同一容器中以3秒的固定间隔显示一些图表。当在同一容器中创建新图表时,旧图表将被销毁。这可能是个问题。是的,当然,所以我想到在不同的重叠容器中绘图。你能推荐其他的标准方法吗?在不同的重叠容器中绘制图表的结果是什么?每个图表有不同或相同的选项吗?你能在像JSFIDLE这样的在线代码编辑器中重现你的问题吗?是否有相同的容器可以用于所有图表。像Highcharts.chart('my-graph-area',o)您希望在一个容器中包含多个图表吗?使用间隔计时。即使是现在,也要将它加载到相同的容器图表中,以便在存储到数组中时,无法正确获取它。在不同的容器中打印,每个容器重叠是一种解决方法。你能推荐一个更好的解决方案吗?我已经编辑了上面的片段。图表在不同容器中打印并存储到chartArray
。检查控制台以获取chartArray
值。如果它在此处不起作用。将此JS
代码放入您的应用程序并检查。
var chartArray = [],
counter = 1,
dataArr = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
],
containers = document.getElementById('containers');
function drawChart(data) {
var cnt = document.createElement('div'),
cntId = 'container' + counter++,
chart;
cnt.setAttribute('id', cntId);
containers.appendChild(cnt);
chart = new Highcharts.Chart(cntId, {
title: {
text: "title",
},
xAxis: {
categories: [1, 2, 3, 4],
},
series: [{
type: 'line',
data: data,
}]
});
return chart;
}
dataArr.forEach(function(data) {
var chart = drawChart(data);
chartArray.push(chart);
});