javascript - 向 d3 图表添加一条水平线显示错误的值

标签 javascript angularjs svg d3.js

我想在我的图表中添加一条水平线,相对于 y 轴值,问题是它们出现在错误的位置。

两条线应显示在相对于 y 轴值的 90 和 140 处。

我用来添加该行的代码如下:

if (before_meal !== null || after_meal !== null) {
                    svg.append("svg:line")
                        .attr("x1", 0)
                        .attr("x2", width)
                        .attr("y1", before_meal)
                        .attr("y2", before_meal)
                        .style("stroke", "rgb(189, 189, 189)");

                    svg.append("svg:line")
                        .attr("x1", 0)
                        .attr("x2", width)
                        .attr("y1", after_meal)
                        .attr("y2", after_meal)
                        .style("stroke", "rgb(189, 189, 189)");
}

请在此处查看我的工作示例:JSFiddle

最佳答案

在你的代码中你有这个:

var y = d3.scale.linear()
       .range([height, 0]);

这将返回一个函数 y,它将像素空间映射到您的绘图坐标空间。

所以当你这样做的时候:

.attr("y1", before_meal)

您告诉 d3 在 90 个“像素”处放置一条线。而是使用:

.attr("y1", y(before_meal))

它告诉 d3 将 90 y 轴单位转换为适当的像素。

已更新 fiddle .

关于javascript - 向 d3 图表添加一条水平线显示错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951560/

相关文章:

javascript - 通过检查数组中的值从 div 中删除项目

javascript - 在光标位置拆分 div 内容

svg - graphviz:如果输出是 SVG,则不会插入 SVG 图像的节点

jquery - 查找以 unicode 字符串作为值的属性

python - 大 d3.js 图形、 Canvas 或服务器端渲染?

javascript - Meteor - 全局 keydown 后找到集合?

javascript - 如何将可观察数据通过管道传输到可观察数组中?

css - AngularJS 中的粘性 Bootstrap 页脚

node.js - Blob 保存为 [object Object] Nodejs

angularjs - 为什么 webpack 打包为 'System.register'