JSFiddle - React, Tailwind, and code Playground

by Steven Senkus

HTML

<script src="http://d3js.org/d3.v3.min.js"></script>

CSS

body {
    text-align: center;
    
}

svg {
    background-color: #fafafa;
    border:2px solid #000;
    margin: 10px auto;
    
}
.point-label {
    fill: #f00;
    font-size: 12px;
    font-weight: bold;    
    font-family: Trebuchet MS;
    
    
    
}
.axis path,
.axis line {
    fill: none;
    stroke: black;
    shape-rendering: crispEdges;
}

.axis text {
    font-family: sans-serif;
    font-size: 13px;
    fill: #007;
}

JavaScript

//Width and height
var w = 900;
var h = 300;
var padding = 40;

var dataset = [
    [5, 20],
    [480, 90],
    [250, 50],
    [100, 33],
    [330, 95],
    [410, 12],
    [475, 44],
    [25, 67],
    [85, 21],
    [220, 88],
    [600, 150]
];

//Create scale functions
var xScale = d3.scale.linear()
    .domain([0, d3.max(dataset, function (d) {
        return d[0];
    })])
    .range([padding, w - padding * 2]);

var yScale = d3.scale.linear()
    .domain([0, d3.max(dataset, function (d) {
        return d[1];
    })])
    .range([h - padding, padding]);

var rScale = d3.scale.linear()
    .domain([0, d3.max(dataset, function (d) {
        return d[1];
    })])
    .range([2, 5]);
//Define X axis
var xAxis = d3.svg.axis()
    .scale(xScale)
    .orient("bottom").ticks(5);
//Define y axis
var yAxis = d3.svg.axis()
    .scale(yScale)
    .orient("left").ticks(5);

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


//Create circles
svg.selectAll("circle")
    .data(dataset)
    .enter()
    .append("circle")
    .attr("cx", function (d) {
        return xScale(d[0]);
    })
    .attr("cy", function (d) {
        return yScale(d[1]);
    })
    .attr("r", function (d) {
        return rScale(d[1]);
    });

//Create labels
svg.selectAll("text")
    .data(dataset)
    .enter()
    .append("text")
    .text(function (d) {
        return d[0] + "," + d[1];
    })
    .attr("x", function (d) {
        return xScale(d[0]);
    })
    .attr("y", function (d) {
        return yScale(d[1]);
    })
    .attr('class','point-label');

//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);