#javascript #highcharts
#javascript #графики
Вопрос:
привет, кто-нибудь может мне помочь, я хочу отобразить данные за последние семь дней на моей диаграмме, это работает в этом типе диаграммыhttps://www.highcharts.com/demo/line-time-series но не работает в https://www.highcharts.com/demo/areaspline
например, если сегодня 04.05.2019, на графике будут отображаться данные с 30-03-2019 по 05-04-2019 (7 дней), а на графике areaspline есть pointStart, но как сделать его динамичным для отображения последних 7 дней? вот мой пример
$(function() {
Highcharts.setOptions({lang:{thousandsSep:","}});
$('#container').highcharts({
chart:{
type:'areaspline',
zoomType: 'x'
},
title:{
text:null,
margin:0,
floating:true,
verticalAlign:'bottom',
x:0,
y:0
},
xAxis:{
type:'datetime',
maxZoom:48*3600*1000
},
plotOptions:{
series:{
pointStart: Date.UTC(2019, 03-1, 30),
pointInterval: 24 * 3600 * 1000 // one day
}
},
yAxis:{
title:{
text:null,
},
},
credits:{
enabled:false
},
series:[{
showInLegend:false,
name:"Dollar",
data:[1,0.5,3,2,5,2.5]
});
});
Ответ №1:
Вы можете использовать tickPositioner
для возврата позиции за 7 дней за последние 7 дней.
Начало точки должно быть установлено с текущей датой, по которой вы можете это сделать:
pointStart: Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()),
var d = new Date();
d.setDate(d.getDate() - 7);
Highcharts.chart('container', {
chart: {
type: 'areaspline',
zoomType: 'x'
},
xAxis: {
type: 'datetime',
maxZoom: 48 * 3600 * 1000,
tickInterval: 24 * 3600 * 1000,
tickPositioner: function(min, max) {
var interval = this.options.tickInterval,
ticks = [],
count = 0;
while (min < max) {
ticks.push(min);
min = interval;
count ;
}
ticks.info = {
unitName: 'day',
count: 1,
higherRanks: {},
totalRange: interval * count
}
return ticks;
}
},
series: [{
showInLegend: false,
name: "Dollar",
data: [88, 96, 97, 105, 0,84,86],
pointStart: Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()),
pointInterval: 24 * 3600 * 1000 // seven days
}]
});
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<div id="container"></div>
Для другого типа данных:
var d = new Date();
d.setDate(d.getDate() - 7);
Highcharts.chart('container', {
chart: {
type: 'areaspline',
zoomType: 'x'
},
xAxis: {
type: 'datetime'
},
series: [{
showInLegend: false,
name: "Dollar",
data: [
[Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()),88],
[Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate() 1),89],
[Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate() 2),0],
[Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate() 3),102],
[Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate() 4),114],
[Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate() 5),120]],
}]
});
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<div id="container"></div>
Ссылки на API:
https://api.highcharts.com/highcharts/xAxis.tickPositioner
https://api.highcharts.com/highcharts/series.line.pointStart
Комментарии:
1. большое спасибо, но почему на вашей демонстрационной диаграмме отображаются данные с 6 апреля по 1 июня, она должна отображать данные за последние 7 дней с 31 марта по 6 апреля ..??
2. спасибо, но не исправлено, просто вопрос, если мне не нравятся данные: [88, 96, 97, 105, 106,84,86] но [Дата.UTC(2019, 04-1, 02), 0 ], [ Дата.UTC(2019, 04-1, 03), 35 ], я сделал это в areaspline, если всегда оставаться высоким в 35, даже если нет данных tomorow..it должно снизиться, но не
3. Добавлен один пример с предложенным типом данных, похоже, работает нормально.