バックグラウンド
ハイチャートを使用して動的に時間に対する平均トラフィックを表示しようとしていました。つまり、このように交通量を繰り返し表示して、次の23:00になったら0:00に戻したいということです。
これを行うには、24 のカテゴリ ['0:00', '1:00'...,'23:00'] を設定し、データが ajax によって更新されると、たとえば 1 秒ごとにポイントを追加します。
var chart = new Highcharts.Chart({
...//some options
xAxis: {
categories:['0:00','1:00','2:00',...,'23:00']
},
load: function() {setInterval(updateData,1000)}
series: [] //empty series here, adding dynamically by ajax
})
updateData は関数として定義されています
function updateData(){
var data = $.ajax(...)// get the data
var series = chart.series[0];
if(series.data.length < 24){ //when data.length is < 24 add directly
chart.series[0].addPoint(data,true,false);
}else{
chart.series[0].addPoint(data,true,true);//set the 3rd option to true to remove the first data point, actually here this data is equal to the first one since this is a circle, when it comes to 24:00 it is actually 0:00, and I should update the xAxis.
//code updating the axis categories to [1:00, 2:00...23:00,0:00]
xAxis.setCategories(categories);
}
}
x 軸は [ 2:00、 3:00 、 ...23:00 、 0:00 、24 ] であることが判明しました。つまり、今回追加した点はカテゴリ [24 ]:0:00、実際には存在しないカテゴリ[25]に対応しているため、デフォルトでは24に設定されています。
解決策(迅速かつ汚い)
カテゴリをリング シフトしないで、次のように新しいサークルをプッシュします。
categories.push("time");//time is 0:00-23:00
xAxis.setCategories(categories);
しかし、これによりカテゴリがどんどん大きくなります..これは悪いことです。どうすればこれを修正できますか。
別の解決策(いくつかの問題もあります)
x 軸のタイプとして datetime を使用すると、別の問題が発生します。私のデータ形式は次のとおりです
time count
8:00 23
9:00 56
... ...
[time, count] のようなポイントを作成できます。問題は、時間しかないということです。のような日付を手動で追加してデータを構築しても
time = (new Date("2012-11-17 "+time)).getTime()
実現可能と思われる。しかし、24 時間経過すると、ここでの x 軸の値が最初の値と等しいため、スプラインはグラフの左側に戻ります。
ところで:x軸に時間のみを表示するにはどうすればよいですか。上の画像では左側に日付が表示され、時間間隔が自動的に表示されます。すべてを表示するにはどうすればよいですか?ご清聴ありがとうございました!!!
@Ruchit Rami のアドバイスに従い、コードを修正しました。
/*update part*/
var time = series.points.length > 0 ? series.points[series.points.length-1].category+3600 : 0;
//from 1970-1-1 0:00 And **add 1 hour everytime**
if (series.data.length < 24) {
series.addPoint([time, sum],true,false);
} else {
series.addPoint([time, sum],true,true);
}
/*chart part*/
xAxis: {
type: 'datetime',
dateTimeLabelFormat: {
second: '%H:%M',
minute: '%H:%M',
hour: '%H:%M',
day: '%H:%M',
week: '%H:%M',
month: '%H:%M',
year: '%H:%M'
}
tickInterval: 3600
}
結果
日付ラベルの形式は指定しても影響ないようです
。また、時刻が正しくありません。なんで?ありがとう!
まだ正しく表示されませんでした