d3 linkHorizontal for straight line curves

久未见 提交于 2021-01-28 21:29:31

问题


Can d3 linkHorizontal be used for straight line curves? If not, am I missing any d3 feature for that kind of link path? Of-course I can always go manual and calculate it myself.

From

To


回答1:


You could use d3.curveStep, which creates a path with right-angle corners:

 var link = d3.line()
      .x(function(d,i) { return xScale(i); })
      .y(function(d,i) { return yScale(d); })
      .curve(d3.curveStep);
    
    var width = 500
    var height = 500
    var margin = 25
    
    var data = [
      [3, 7]
    ]
    
    var xScale = d3.scaleLinear()
    	.domain([0, 1])
    	.range([0, width])
    
    var yScale = d3.scaleLinear()
    	.domain([0, 10])
    	.range([height, 0])
    
    var svg = d3.select("body").append("svg")
      .attr("width", width + margin + margin)
      .attr("height", height + margin + margin)
    
    var g = svg.append("g")
      .attr("transform", "translate(" + margin + "," + margin + ")")

    var points = g.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    
    points.append("path")
    	.datum(d => d)
    	.attr("d", link)
    	.style("stroke", "black")
    	.style("fill", "none")
    
    points.selectAll("circle")
    	.data(d => d)
    	.enter()
    	.append("circle")
    	.attr("cx", (d,i) => xScale(i))
    	.attr("cy", (d) => yScale(d))
    	.attr("r", 5)
    	.style("stroke", "none")
    	.style("fill", "black")
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>


来源:https://stackoverflow.com/questions/60867684/d3-linkhorizontal-for-straight-line-curves

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!