d3.js移动平均线图(自定义插值)与工具提示
d3.js moving average line chart (custom interpolation) with tool-tip
我正在尝试将工具提示添加到我的d3-js折线图中。大多数解决方案似乎都是基于计算圆来简化工具提示弹出窗口。但不幸的是,这对我来说不起作用。我的折线图有自定义插值(基于移动平均值函数),当我使用数据绘制圆时,它们最终会遍布图表(这是意料之中的;线是平均值,而不是值本身)。
有人有什么建议吗?圆形(散点图方式)是完全可以的,但它们必须使用与直线相同的移动平均值进行计算。我在想某种函数,它给出了移动平均函数的坐标,然后做"正常"的循环?但这意味着我已经有了一个重复的函数。。。
Update3-这不起作用,因为我显然仍然只得到值,我想我现在已经得到了
// Add event listeners/handlers
svg.on('mouseover', function() {
marker.style('display', 'inherit');
}).on('mouseout', function() {
marker.style('display', 'none');
}).on('mousemove', function() {
var mouse = d3.mouse(this);
marker.attr('cx', mouse[0]);
var datumVar = x.invert(mouse[0]),
index = bisect(dataFilter, datumVar),
startDatum = dataFilter[index - 1],
endDatum = dataFilter[index],
interpolate = d3.interpolateNumber(startDatum.Kvot, endDatum.Kvot),
range = endDatum.datum - startDatum.datum,
valueY = interpolate((datumVar % range) / range);
console.log((valueY));
marker.attr('cy', y(valueY));
});
创建包含我的值的ma的对象的最终代码:
var movingWindowAvg = function (arr, step) { // Window size = step
return arr.map(function (_, idx) {
var wnd = arr.slice(idx, idx + step);
var result = d3.sum(wnd.map(function(d) { return d.Kvot; })) / wnd.length; if (isNaN(result)) { result = _; }
var tmpDate = wnd[0].datum;
return {Kvot: result, datum: tmpDate};
});
};
上面的代码将给出第一次/最后一次观测的值,但这些值不是n移动平均值。所以,差不多到了。
如果您知道图形的位置和显示的当前帧中的y轴索引,则可以将这些值与mouseover事件中的鼠标x和y坐标相关联,并计算该行在该给定点"应该"具有的值。它不太准确,但它为我完成了任务。
这是对该技术的回应,如果你想看到一些代码,我可以稍后在家里提供给你。
相关文章:
- 获取Meteor中自定义Bootbox字段的值
- 获取自定义属性的值
- 高级自定义字段按单选按钮值排序
- c3.js图表上的自定义刻度值
- 如何通过Angular中的$resource发送来自自定义指令的输入值
- ExtJS 4,自定义Ext.grid.Panel的布尔列值
- 动态更新Angular2指令中自定义属性的值
- 如何限制自定义指令的可能属性值
- 图表.js - 具有多个值的自定义工具提示
- 如何仅在文本字段中有值时才将自定义过滤器应用于 ng-repeat
- 指令中的 AngularJS 自定义过滤器以格式化值
- Angularjs - 使用自定义指令验证初始 url 值
- datalist获取选定的值和自定义属性(无事件)
- 从字符串中检索自定义参数的值
- 如何使用javascript获取元素的自定义属性值
- 可手持-根据单元值自定义渲染器
- 使用表单字段值自定义CSS属性
- d3.js移动平均线图(自定义插值)与工具提示
- 如何根据预先确定的约束值自定义热图颜色
- 使用自定义的类easing插值缩放