JSFiddle - React, Tailwind, and code Playground

CSS

path {
    fill: none;
    stroke: black;
}

rect {
    pointer-events: all;
}

JavaScript

function addElem(container,elem){
                return container.append(elem);
            }

            function createLinearScale(dx,dy,rx,ry){
                return d3.scale.linear()
                     .domain([dx,dy])
                     .range([rx,ry])
            }

            function appendWithData(container,selector,type,id,classed,dataset){
                var result =  container.selectAll(selector)
                        .data(dataset)
                        .enter()
                        .append(type);

                if(id)
                    result.attr("id",id);
                if(classed)
                    result.classed(classed,true);
                return result;
            }

            function getElem(selector){
                return d3.select(selector);
            }

            function getAxis(){
                return d3.svg.axis();
            }

            function drag(){
                return d3.behavior.drag();
            }

            function getThis(){
                return d3.select("this");
            }

            function zoom(){
                return d3.behavior.zoom();
            }

            function arrayDelete(array,target,condition){
                for (var i = 0, l = array.length; i < l; i ++) {
                    var v = arr[i];
                    if((target = v) && condition){
                        array.splice(i,1);
                    }
                }
            }

            /**
             * Add axis to chart
             *
             */
            var height = 500;
            var width = 960;

            var body = getElem("body");
            var svg = addElem(body,"svg");
            var outer = addElem(svg,"g");
            var bgRect = addElem(outer, "rect");
            bgRect.attr('fill', 'none')
                .attr('stroke', 'none')
                .attr('width', width)
                .attr('height', height);

            var target = addElem(outer,"g");

...