javascript - d3js不进入行功能

标签 javascript d3.js

我想用以下代码通过 d3 画一条线。( http://jsfiddle.net/totaljj/L9n7qnv1 )

绘制了x,y轴,但附加d属性时不进入line函数。

可以在第104行调试,看到代码没有进入到行函数。

如有任何帮助,我们将不胜感激。

<!DOCTYPE html>
<html>
<style>
.axis--x path {
    display: none;
}

.line {
    fill: none;
    stroke: steelblue;
    stroke-width: 1.5px;
}
</style>

<body>
    <!-- Page Content -->

    <div>

            <svg width="430" height="250"></svg>
    </div>

    <section>

        <script src="https://d3js.org/d3.v4.min.js"></script>

        <script>

            var data=
            '{"recordsFiltered":5,"raCounts":[{"name":"comp_name","values":[{"date_":"2016","actual":170.0,"DT_RowId":"row_null"},{"date_":"2015","actual":198.0,"DT_RowId":"row_null"},{"date_":"2015","actual":149.0,"DT_RowId":"row_null"},{"date_":"2014","actual":197.0,"DT_RowId":"row_null"},{"date_":"2014","actual":146.0,"DT_RowId":"row_null"}],"DT_RowId":"row_null"}],"draw":null,"recordsTotal":5}';

            var d = JSON.parse(data);
            draw(d.raCounts);

            function draw(data){

                //svg
                var svg = d3.select("svg"),
                    margin = {top: 100, right: 80, bottom: 30, left: 50},
                    width = svg.attr("width") - margin.left - margin.right,
                    height = svg.attr("height") - margin.top - margin.bottom,
                    g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");


                //time
                var parseTime = d3.timeParse("%Y%m%d");

                //domain
//              var x = d3.scaleTime().range([0, width]),
                var x = d3.scaleLinear().range([0, width]),
                    y = d3.scaleLinear().range([height, 0]),
                    z = d3.scaleOrdinal(d3.schemeCategory10);

                //line
                var line = d3.line()
                    .curve(d3.curveBasis)
                    .x(function(d) { 
                        return x(d.date_); })
                    .y(function(d) { 
                        return y(d.actual); });

                  //domain
                  x.domain(d3.extent(data[0].values, function(d) { 
                      return d.date_; }));

                  y.domain([
                    d3.min(data, function(c) { 
                        return d3.min(c.values, function(d) {
                            return d.actual; }); }),
                    d3.max(data, function(c) { 
                        return d3.max(c.values, function(d) {
                            return d.actual; }); })
                  ]);

                  z.domain(data.map(function(c) { 
                      return c.DT_RowId; }));

                  //axis
                  g.append("g")
                      .attr("class", "axis axis--x")
                      .attr("transform", "translate(0," + height + ")")
                      .call(d3.axisBottom(x));

                  g.append("g")
                      .attr("class", "axis axis--y")
                      .call(d3.axisLeft(y))
                    .append("text")
                      .attr("transform", "rotate(-90)")
                      .attr("y", 6)
                      .attr("dy", "0.71em")
                      .attr("fill", "#000")
                      .text("count");

                  var ra = g.selectAll(".ra")
                    .data(data)
                    .enter().append("g")
                      .attr("class", "ra");

                 //ra line
                  ra.append("path")
                      .attr("class", "line")
                      .attr("d",
                              function(d) { return 
                                  line(d.values); })
                      .style("stroke-dasharray", ("1","1"));
            }


            </script>
    </section>

</body>
</html>

最佳答案

JavaScript 并不总是要求在行尾使用分号。 It will automatically insert them in certain situations ,而你调用 line 函数的地方就是其中之一:

                  .attr("d",
                          function(d) { return 
                              line(d.values); })

因此,修复是在 return 之后删除换行符:

                  .attr("d",
                          function(d) { return line(d.values); })

关于javascript - d3js不进入行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41423470/

相关文章:

javascript - 如何从特定的另一个对象创建对象

javascript - 通过单击按钮逐步增加元素的大小

javascript - 如何将节点从一个模拟移动到另一个模拟

d3.js - 从 d3.js 中的鼠标位置获取 X 和 Y 轴值

javascript - 如何从 D3 v5 中的 CSV 文件加载数据

javascript - 通过 AJAX 使用 $().each 将innerHTML分配给元素不起作用

javascript - 异步加载脚本

javascript - Angular2 - 将 http.get 响应传递给类对象

javascript - 如何在 d3.js 中制作单独的 .js 文件饼图?

javascript - 定位由 d3.js 创建的 div