Javascript 使用带有ID的数组向highchart图表添加数据
我想将一个系列添加到highchart散点图中,在该散点图中我命名系列中的每个点。我用以下方法创建图表:Javascript 使用带有ID的数组向highchart图表添加数据,javascript,highcharts,scatter-plot,Javascript,Highcharts,Scatter Plot,我想将一个系列添加到highchart散点图中,在该散点图中我命名系列中的每个点。我用以下方法创建图表: var chart; // globally available makeCharts = function(){ chart = new Highcharts.Chart({ chart: { renderTo: 'container1', type: 'scatter' },
var chart; // globally available
makeCharts = function(){
chart = new Highcharts.Chart({
chart: {
renderTo: 'container1',
type: 'scatter'
},
series: [{
name: 'a',
data: [{
'id': 'point1',
'x': 1,
'y': 2
}, {
'id': 'point2',
'x': 2,
'y': 5
}]
}]
});
}
我希望能够使用以下方式更新图表上的点:
chart.series[0].setData([{id:['point3', 'point4', 'point5'], y:[0,1,2], x:[1,2,3]}])
但这是不对的。在每个点都有ID的情况下,是否可以使用此方法更新图表
编辑:
为了澄清,我希望能够直接传递数组,而不是使用addPoint()
逐点添加数据。我可以在数组中循环并使用addPoint()
执行以下操作:
id:['point3', 'point4', 'point5'];
y:[0,1,2];
x:[1,2,3];
for (i=0; i<x.length; i++)
{
chart.series[0].addPoint({
x: x[[i],
y: y[i],
id: id[i]
});
}
chart.series[0].setData([[1,0, 'point3'],[2,1, 'point4'],[3,2, 'point5']]);
chart.series[0].setData([[1,0, 'point3'],[2,1, 'point4'],[3,2, 'point5']]);
我发现我可以添加如下数据:
id:['point3', 'point4', 'point5'];
y:[0,1,2];
x:[1,2,3];
for (i=0; i<x.length; i++)
{
chart.series[0].addPoint({
x: x[[i],
y: y[i],
id: id[i]
});
}
chart.series[0].setData([[1,0, 'point3'],[2,1, 'point4'],[3,2, 'point5']]);
chart.series[0].setData([[1,0, 'point3'],[2,1, 'point4'],[3,2, 'point5']]);
但是,当选择点时,我可以访问id
的唯一方法是通过this.point.config[2]
。使用以下方法,我无法使用chart.get('pointID')
识别点,因为我没有设置ID
。我希望能够仅使用ID
尝试使用
但如果需要为序列设置数据,请使用
chart.series[0].setData([{
x: 0,
y: 0,
id: 'anything'
},{
x: 2,
y: 2,
id: 'another'
}]);
一旦您可以像这样传递数据:
id:['point3', 'point4', 'point5'];
y:[0,1,2];
x:[1,2,3];
for (i=0; i<x.length; i++)
{
chart.series[0].addPoint({
x: x[[i],
y: y[i],
id: id[i]
});
}
chart.series[0].setData([[1,0, 'point3'],[2,1, 'point4'],[3,2, 'point5']]);
chart.series[0].setData([[1,0, 'point3'],[2,1, 'point4'],[3,2, 'point5']]);
(正如你在问题中所说的),我可以建议你使用一点黑客
我们需要在Highcharts.Point原型的方法applyOptions
中添加另一条语句
if (typeof options[0] === 'number' && options[2] && typeof options[2] === 'string') this.id = options[2];
您可以看到它的作用。广义上讲,有两种方法可以动态修改图表数据
默认为true。之后是否重新绘制图表 补充一点。当添加多个点时,它是高度安全的 建议将重绘选项设置为false,而不是 添加点后显式调用chart.redraw() 完成了 在您的情况下,因为您希望动态添加一些点,但保留现有点,所以应该使用方法2。但是您需要在循环中使用它,将redraw设置为false(从而解决速度慢的问题),然后在循环之后显式调用redraw方法 代码
var id = ['point3', 'point4', 'point5'],
y = [0, 1, 2],
x = [1, 2, 3];
for (var i = 0; i < x.length; i++) {
chart.series[0].addPoint({
x: x[i],
y: y[i],
id: id[i]
},false);
}
chart.redraw();
var id=['point3','point4','point5'],
y=[0,1,2],
x=[1,2,3];
对于(变量i=0;i
谢谢你的建议。我希望能够在中添加一个数组。我想我可以使用一个带有
addpoint()
的循环来循环一个同样有效的数组。@celenius我可以看看你想要添加的数组吗?我在上面的问题中包括了它:x=[1,2,3];y=[0,1,2];id=['point3'、'point4'、'point5']代码>请更新问题的状态,如果有任何解决方案有助于标记,如果有什么问题,请考虑至少留下评论。