JSFiddle - React, Tailwind, and code Playground

HTML

<button id="button">Try it</button>
<script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>

CSS

.axis path,
        .axis line {
          fill: black;
          stroke: none;
          shape-rendering: crispEdges;
        }

        .axis text {
          font-family: sans-serif;
          font-size: 11px;
        }

        .dataline {
          stroke: purple;
          stroke-width: 1;
          fill: none;
        }

JavaScript

var w = 500;
var h = 300;
var padding = 30;

var dataset = [
  [1.3, 2015],
  [2.1, 2036.25],
  [3.4, 2057.5],
  [3.5, 2057.5],
  [4, 2100]
];

//Create scale functions
var yScale = d3.scale.linear()
  .domain([0, 4])
  .range([h - padding, padding]);

var xScale = d3.scale.linear()
  .domain([2015, 2100])
  .range([padding, w - padding * 2]);

//Define X axis
var xAxis = d3.svg.axis()
  .scale(xScale)
  .orient("bottom");

//Define Y axis
var yAxis = d3.svg.axis()
  .scale(yScale)
  .orient("left");

//Create SVG element
var svg = d3.select("body")
  .append("svg")
  .attr("width", w)
  .attr("height", h);

var lineFunc = d3.svg.line()
  .x(function(d) {
    return xScale(d[1]);
  })
  .y(function(d) {
    return yScale(d[0]);
  })
  .interpolate('linear');

svg.append('svg:path')
  .transition()
  .attr('d', lineFunc(dataset))
  .attr('class', 'dataline');


//Create X axis
svg.append("g")
  .attr("class", "axis")
  .attr("transform", "translate(0," + (h - padding) + ")")
  .call(xAxis);

//Create Y axis
svg.append("g")
  .attr("class", "axis")
  .attr("transform", "translate(" + padding + ",0)")
  .call(yAxis);

//create event listener and data reset functions
d3.select("button")
  .on("click", function() {
    dataset = [
      [0, 2015],
      [2.05, 2036.25],
      [3.25, 2057.5],
      [2.15, 2057.5],
      [3.7, 2100]
    ];
    var dynamoBar = svg.select('.dataline')
      .transition(1000)
      .attr("d", lineFunc(dataset))
      .attr("class", "dataline");
  })