代码之家  ›  专栏  ›  技术社区  ›  Javascript Coder

无法在d3图表中使用符号

  •  0
  • Javascript Coder  · 技术社区  · 6 年前

    我在我的项目中使用的是d3图表版本4,

    https://codesandbox.io/s/lucid-morning-bi9vc

    我试着用三角形符号来代替我的折线图中的圆圈

    g.selectAll(".point")
          .data(data)
          .enter()
          .append("path")
          .attr("d", d3.symbolTriangle)
          .attr("transform", function(d) {
            return (
              "translate(" + xScale(d.startTime) + "," + yScale(d.magnitude) + ")"
            );
          })
          .style("fill", "red")
          .attr("class", "point");
    

    以前是为circle工作的-这对circle来说很好。

    g.selectAll("circle")
          .data(data)
          .enter()
          .append("circle")
          .attr("cx", function(d) {
            return xScale(d.startTime);
          })
          .attr("cy", function(d) {
            return yScale(d.magnitude);
          })
          .attr("r", function(d) {
            return 6;
          })
    

    我跟踪了这个-

    https://bl.ocks.org/mbostock/3244058 使用like .attr("d", d3.svg.symbol().type("triangle-up")) 但这也行不通。

    我试着引用 https://bl.ocks.org/feyderm/4d143591b66725aed0f1855444752fd9 和符号链接 https://github.com/d3/d3-shape#symbols 但我不能成功地使用它,任何指导。谢谢。

    0 回复  |  直到 6 年前
        1
  •  -1
  •   Meow    6 年前
    <!DOCTYPE html>
    

    <!--TRY Triangle-->
    <div id="chart"></div>
    
    <script src="https://d3js.org/d3.v4.min.js"></script>
    
    <script type="text/javascript">
    
        var svg_dx = 800, 
            svg_dy = 400,
            margin_x = 100;
            //Triangle shape//
        var shapes = [ 
                       d3.symbolTriangle ];
    
        var x = d3.scalePoint()
                  .domain(d3.range(0, shapes.length))
                  .range([margin_x, svg_dx - margin_x]);
    
        var svg = d3.select("#chart")
                    .append("svg")
                    .attr("width", svg_dx)
                    .attr("height", svg_dy);
    
        var symbol = d3.symbol().size([1500]),
            color = d3.schemeCategory10;
    
        var drag_behavior = d3.drag()
                              .on("start", dragstarted)
                              .on("drag", dragged);
        svg.append("g")
           .selectAll("path")
           .data(shapes)
           .enter()
           .append("path")
           .attr("d", symbol.type(shape => shape))
           .attr("transform", (shape, i) => "translate(" + x(i) + ", -40)")
           .style("fill", (shape, i) => color[i])
           .call(drag_behavior)
           .transition()
           .duration((shape, i) => i * 800)
           .attr("transform", (shape, i) => "translate(" + x(i) + "," + (svg_dy / 2) + ")");
    
        function dragstarted() {
          d3.select(this).raise();
        }
    
        function dragged(shape) {
    
            var dx = d3.event.sourceEvent.offsetX,
                dy = d3.event.sourceEvent.offsetY;
    
            d3.select(this)
              .attr("transform", shape => "translate(" + dx + "," + dy + ")");
        }
    
    </script>
    

    D3 v4 shapes