src/plot/lines.js
function getLineRenderData(props, data, idx) {
  if (isEmpty(data)) return undefined
  const path2D = getPath2D()
  const values = getPlotValues(props, head(data), idx, {hoverAlpha: 0.2})
  if (props.interpolate) {
    splineInterpolation(props, data, path2D)
  } else {
    path2D.moveTo(values.x, values.y)
    reduce(
      data,
      (shouldDrawPoint, d) => {
        const x = plotValue(props, d, idx, 'x')
        const y = plotValue(props, d, idx, 'y')
        if (notPlotNumber([x, y])) return false
        if (shouldDrawPoint) path2D.lineTo(x, y)
        else path2D.moveTo(x, y)
        return true
      },
      true
    )
  }
  return {
    ...values,
    data,
    hoverSolver,
    path2D,
    type: 'line',
  }
}
function getLineRenderData(props, data, idx) {
  if (isEmpty(data)) return undefined
  const path2D = getPath2D()
  const values = getPlotValues(props, head(data), idx, {hoverAlpha: 0.2})
  if (props.interpolate) {
    splineInterpolation(props, data, path2D)
  } else {
    path2D.moveTo(values.x, values.y)
    reduce(
      data,
      (shouldDrawPoint, d) => {
        const x = plotValue(props, d, idx, 'x')
        const y = plotValue(props, d, idx, 'y')
        if (notPlotNumber([x, y])) return false
        if (shouldDrawPoint) path2D.lineTo(x, y)
        else path2D.moveTo(x, y)
        return true
      },
      true
    )
  }
  return {
    ...values,
    data,
    hoverSolver,
    path2D,
    type: 'line',
  }
}
generate the array of render data