同じグラフにナビゲータが必要な場合は少し難しいでしょう。ナビゲータは日時データでのみ機能し、メインのグラフから軸に接続する必要があります。
だから、あなたはその形式のデータを持っている:
var points = [
[5, 9, Date.UTC(2016, 1, 0)],
[65, 6, Date.UTC(2016, 1, 1)],
...
次の2つのx軸必要 - ナビゲーターに接続されたデータや他のものを表しています。第2の軸は、ナビゲータで動作するように表示されていなければならず、datetimeデータと接続する必要があります。
これで、2つのx軸を除いて、実際のデータを持つ2つの系列と、最初の系列の値が[date, y]
となっています。追加のデータはナビゲータに表示されます。ナビゲータでは散布図を使用できないため、ラインシリーズに変換されます。エラーなしでデータを表示するには、データを日付順にソートする必要があります。
series: [{
id: 'main-series',
data: points.map(function(point) {
return [point[0], point[1], point[2], point[1]]
}),
showInNavigator: false,
xAxis: 1,
keys: ['x', 'y', 'date', 'holdY'] //holdY is for easier hiding points
}, {
xAxis: 0,
data: points.map(function(point) {
return [point[2], point[1]];
}),
showInNavigator: true,
enableMouseTracking: false,
color: 'transparent',
showInLegend: false
}],
xAxis: [{
minRange: 1000 * 3600 * 24,
type: 'datetime',
tickLength: 0,
tickLength: 0,
labels: {
enabled: false
},
}, {
type: 'linear'
}],
最後に、ナビゲータの極端な点を表示/非表示にするコールバックが必要です。非表示/表示は、日付である第3ポイントのプロパティに依存します。特定のポイントを非表示にするAPIはありませんが、ポイントの値をnullに設定することで実現できます(つまり、実際のyをholdYに保存しています)。
events: {
afterSetExtremes: function(e) {
var points = this.chart.get('main-series').points;
points.forEach(function(point) {
point.update({
y: e.min <= point.date && point.date <= e.max ? point.holdY : null
}, false, false);
});
this.chart.redraw();
}
}
例:https://jsfiddle.net/3wuwdonn/1/
私は、あなたがメインチャートの第2のX軸とシリーズを必要としない、別のチャートとしてナビゲータを使用して検討すると、あなたはそれらを作るために必要はありません見えない。ナビゲーターと
例ここでしかチャート:http://jsfiddle.net/f7Y9p/
あなたはjsfiddle上のコードを追加することはできますか?私はあなたがフィルタリングによって何を意味するか分かりません。ポイントあたりの情報の部分がある場合 - すべての情報を格納するポイントを定義できます - x、yは座標(速度、頻度)、3番目の '不可視'情報は日付、処理可能な日付に基づいていますポイントと適切な行動を取る。 – morganfree
私は要件を全く理解していません。どのように速度と周波数を表現したいですか?日付がx軸にプロットされているのか、データセットにどのデータが表示されているのかだけのフィルタですか?あなたのx軸は何ですか?あなたのy軸は何ですか?そしてあなたのために働いていないこの部分は何ですか?データをフィルタリングすることが主な問題である場合は、グラフの外に書き出し、データをループし、日付パラメータ内に新しい点の配列を作成する関数が必要になります。次に、 'series.setData'または' series.update() '関数を使うことができます。 – jlbriggs
私はそれを更新しました、より理にかなってほしい! – bobleujr