<html>
<head>
<meta name="description" content="Scatterplot w/Scaled Axes">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<script src="https://d3js.org/d3.v4.min.js"></script>
<title>CS 424 - D3 examples</title>
</head>
<body>
</body>
</html>
let svg = d3.select("body").append("svg");
let w = 400;
let h = 400;
svg.attr("width", w)
svg.attr("height", h)
svg.style("background", "#FFE")
let min = 0;
let max = 30;
let randomArray = [];
for (var i=0, t=5; i<t; i++) {
let vals = {"a":i,
"pos":[
Math.floor(min + (Math.random() * (max-min))),
Math.floor(min + (Math.random() * (max-min)))
]};
randomArray.push(vals);
}
console.log(randomArray)
let posesX = randomArray.map( d => d.pos[0] );
console.log(posesX);
let posesY = randomArray.map( d => d.pos[1] );
console.log(posesY);
let minValX = d3.min(posesX);
let maxValX = d3.max(posesX);
let minValY = d3.min(posesY);
let maxValY = d3.max(posesY);
console.log(maxValX);
console.log(maxValY);
let margin = 30;
let xScale = d3.scaleLinear()
.domain([minValX, maxValX]).nice()
.range([margin, w - margin]);
let yScale = d3.scaleLinear()
.domain([maxValY, minValY]).nice()
.range([margin, h - margin]);
let xAxis = d3.axisTop(xScale).ticks(2, 's');
let yAxis = d3.axisLeft(yScale).ticks(5, 's');
svg.selectAll()
.data(randomArray).enter().each( function(d,i) {
//with scaling
let xpos = xScale(d.pos[0]);
let ypos = yScale(d.pos[1]);
svg.append("circle")
.attr("cx", xpos)
.attr("cy", ypos)
.attr("r", 20)
.attr("fill","red")
.attr("opacity", "0.5")
;
svg.append("text")
.text( "(" + d.pos[0] + "," + d.pos[1] + ")" )
.attr("text-anchor", "middle")
.attr("alignment-baseline","central")
.attr("x",xpos)
.attr("y",ypos)
.attr("font-family", "helvetica")
.attr("font-size", "10px")
.attr("fill", "black")
.attr("opacity", "0.5")
svg.append("g")
.attr("transform", "translate(0," + (h - margin) + ")")
.style("font-size","10px")
.style("font-family","Brown")
.call(xAxis)
svg.append("g")
.attr("transform", "translate(" + (margin) + ",0)")
.style("font-size","10px")
.style("font-family","Brown")
.call(yAxis)
});
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |