如果你想在同一个图表中有一个导航器,会有一点棘手。导航器仅与日期时间数据一起工作,并且必须与主图表中的轴连接。
所以,你有这种格式的数据:
var points = [
[5, 9, Date.UTC(2016, 1, 0)],
[65, 6, Date.UTC(2016, 1, 1)],
...
需要两个X轴 - 一个表示连接到导航数据和其他。第二个轴必须可见才能使用导航器,并且必须连接日期时间数据。
所以,现在除了两个x轴,你需要两个系列 - 一个是实际数据,另一个是第一系列的[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'
}],
你最后需要一个回调,它将在导航器中的极值之后隐藏/显示点。隐藏/显示取决于日期的第三点属性。没有直接的API来隐藏/显示特定的点(除了饼图),但可以通过将点的值设置为空来实现(这就是为什么我保存了真实的y的原因)。
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/
我会考虑使用导航器作为一个单独的图表,那么你就不需要在主图中的第二个x轴和系列,你不会需要让他们看起来不可见。
例如利用导航器仅图表这里:http://jsfiddle.net/f7Y9p/
你能上的jsfiddle添加代码?我不确定你的意思是过滤。如果你有每个点的信息部分 - 你可以定义一个点,它将存储所有的信息 - x,y是坐标(速度,频率),第三个'隐形'信息将是日期和基于你可以处理的日期要点并采取适当的行动。 – morganfree
我根本不理解这个需求。你想如何表示速度和频率?日期是绘制在X轴上,还是只显示数据集中显示数据的过滤器?什么是你的X轴?你的y轴是什么?这个不适合你的部分是什么?如果过滤数据是主要问题,那么您需要一些您在图表之外编写的函数,这些函数循环遍历数据并在日期参数中构建一组新的点。然后你可以使用'series.setData'或'series.update()'函数。 – jlbriggs
我更新了它们,希望它更有意义! – bobleujr