gpt4 book ai didi

javascript - HighChart - 按天对数据进行分组

转载 作者:行者123 更新时间:2023-11-29 20:48:15 25 4
gpt4 key购买 nike

我有一个包含 3 个系列和每个系列 4 个点的图表。每个点对应 4 个不同的天(每天一个点)。也就是说,每天总共有 3 分,因为它们是 3 个系列。但这3点在时、分、秒上有所不同。

我想要做的是将这些数据保留在 X 轴中,以便在工具提示中显示它,但 3 个点是对齐的。

让我们用例子来展示它。

这是我目前拥有的:

    chart = new Highcharts.StockChart({

chart: {
renderTo: "container",
type: 'spline'
},

colors: ['#3131F8', '#FB1C1C', '#008000', '#f7a35c', '#8085e9',
'#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1'],

yAxis: {
opposite: false,
showLastLabel: true,
labels: {
enabled: true,
align: "right"
},

title: {
text: 'Tensión'
}
},

rangeSelector: {
enabled: true
},

tooltip: {
pointFormatter: function () {
var n = this.series.name;
var s = '<span style="color:' + this.series.color + '">' + this.series.name + '</span>: <b>';
return s + Highcharts.numberFormat((this.y / 1000), 2, '.') + ' kV</b><br/>';
}
},

legend: {
enabled: true
},

navigation: {
buttonOptions: {
enabled: true
}
},

series: [{"name":"Minima","pointInterval":86400000,"data":[[1538467200000,215.9],[1538581500000,217.6],[1538651700000,218],[1538728200000,218.5]]},{"name":"Maxima","pointInterval":86400000,"data":[[1538506800000,228.8],[1538530200000,228.4],[1538676000000,229.3],[1538779500000,228.8]]},{"name":"Promedio","pointInterval":86400000,"data":[[1538438400000,223.9365],[1538524800000,224.0667],[1538611200000,224.4135],[1538697600000,224.45]]}]
});

http://jsfiddle.net/ZottoSL/8vedjxLs/5/

这就是我想要的(我修改了数据中的X点以达到视觉效果,但实际上我想保留它):

    chart = new Highcharts.StockChart({

chart: {
renderTo: "container",
type: 'spline'
},

colors: ['#3131F8', '#FB1C1C', '#008000', '#f7a35c', '#8085e9',
'#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1'],

yAxis: {
opposite: false,
showLastLabel: true,
labels: {
enabled: true,
align: "right"
},

title: {
text: 'Tensión'
}
},

rangeSelector: {
enabled: true
},

tooltip: {
pointFormatter: function () {
var n = this.series.name;
var s = '<span style="color:' + this.series.color + '">' + this.series.name + '</span>: <b>';
return s + Highcharts.numberFormat((this.y / 1000), 2, '.') + ' kV</b><br/>';
}
},

legend: {
enabled: true
},

navigation: {
buttonOptions: {
enabled: true
}
},

series: [{"name":"Minima","pointInterval":86400000,"data":[[1538438400000,215.9],[1538524800000,217.6],[1538611200000,218],[1538697600000,218.5]]},{"name":"Maxima","pointInterval":86400000,"data":[[1538438400000,228.8],[1538524800000,228.4],[1538611200000,229.3],[1538697600000,228.8]]},{"name":"Promedio","pointInterval":86400000,"data":[[1538438400000,223.9365],[1538524800000,224.0667],[1538611200000,224.4135],[1538697600000,224.45]]}]
});

http://jsfiddle.net/ZottoSL/9bk8hq3n/1/

也就是说,在X轴上绘制图形时,只考虑年、月、日,区分时、分、秒。

谢谢!

最佳答案

您可以使用数据分组来实现所需的外观。这样您就不必进行任何额外的处理。您需要做的就是给出这个定义:

plotOptions: {
series: {
dataGrouping: {
forced: true,
units: [
['day', [1]]
]
}
}
},

要获取工具提示中该点的实际时间,您可以执行以下操作:

tooltip: {
pointFormatter: function() {
var n = this.series.name;
var s = '<span style="color:' + this.series.color + '">' + this.series.name + '</span>: <b>';
return Highcharts.dateFormat('%m/%d - %H:%M', this.series.xData[this.index]) + s + Highcharts.numberFormat((this.y / 1000), 2, '.') + ' kV</b><br/>';
}
},

其中 Highcharts.dateFormat('%m/%d - %H:%M', this.series.xData[this.index]) 获取该点的实际时间。

工作 JSFiddle 示例: http://jsfiddle.net/ewolden/omfdy8nc/

数据分组 API: https://api.highcharts.com/highstock/series.line.dataGrouping


为了消除每天进行数据分组时系列之前或之后的额外时间,我们需要设置一个最小值和最大值。我们有这个空白的原因是因为原始数据的值并未精确设置在每天的午夜。

添加以下 load 事件将查找最小/最大全天,并将 xAxis 和导航器 xAxis 设置为以下值:

chart: {
events: {
load: function() {
let extremes = this.xAxis[0].getExtremes()
let min = extremes.dataMin - extremes.dataMin % (1000 * 60 * 60 * 24),
max = extremes.dataMax - extremes.dataMax % (1000 * 60 * 60 * 24);
this.update({
xAxis: {
min: min,
max: max
},
navigator: {
xAxis: {
min: min,
max: max
}
}
}, true, false, false)
}
}
},

工作示例: http://jsfiddle.net/ewolden/omfdy8nc/32/

加载事件上的 API: https://api.highcharts.com/highstock/chart.events.load

chart.update 上的 API: https://api.highcharts.com/class-reference/Highcharts.Chart#update

关于javascript - HighChart - 按天对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53344635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com