D3.js 在d3中的两个坐标之间画一条直线

D3.js 在d3中的两个坐标之间画一条直线,d3.js,D3.js,我在d3中画了x轴和y轴 var margin = {top: 20, right: 100, bottom: 30, left: 100}, width = 960 - margin.left - margin.right, height = 500 - margin.top - margin.bottom; var xScale = d3.scale.linear() .domain([0, 15]) .range([0, width]); var ySc

我在d3中画了x轴和y轴

var margin = {top: 20, right: 100, bottom: 30, left: 100},
    width = 960 - margin.left - margin.right,
    height = 500 - margin.top - margin.bottom;

var xScale = d3.scale.linear()
    .domain([0, 15])
    .range([0, width]);

var yScale = d3.scale.linear()
    .domain([0, 38])
    .range([height, 0]);

var xAxis = d3.svg.axis()
    .scale(xScale)
    .orient("bottom")
    .innerTickSize(-height)
    .outerTickSize(0)
    .tickPadding(10);

var yAxis = d3.svg.axis()
    .scale(yScale)
    .orient("left")
    .innerTickSize(-width)
    .outerTickSize(0)
    .tickPadding(10);

var svg = d3.select("body").append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

  svg.append("g")
      .attr("class", "x axis")
      .attr("transform", "translate(0," + height + ")")
      .call(xAxis);

  svg.append("g")
      .attr("class", "y axis")
      .call(yAxis);
然后我想在这个网格中的两个点之间画一条线

  svg.append('line')
      .style('stroke', 'black')
      .attr('x1', 5)
      .attr('y1', 5)
      .attr('x2', 20)
      .attr('y2', 20);
下面是结果的一部分

因此,该线不会在栅格坐标(5,5)和(20,20)之间绘制


如何将线放置在已创建网格的坐标上?

计算垂直轴的方式有问题 坐标

选中此项:

svg.append('line')
      .style('stroke', 'black')
      .attr('x1', 5)
      .attr('y1', height -5 )
      .attr('x2', 20)
      .attr('y2', height - 20);

设置轴时,您正在使用
xScale
yScale
。除了在内部用于生成刻度和刻度标签外,这些刻度还提供了在SVG坐标(刻度的范围)和网格(刻度的域)使用的坐标(即数据值)之间进行转换的简单方法

要绘制线,还需要将比例应用于数据值:

svg.append('line')
    .style('stroke', 'black')
    .attr('x1', xScale(5))
    .attr('y1', yScale(5))
    .attr('x2', xScale(20))
    .attr('y2', yScale(20));