Last active
August 29, 2015 14:18
-
-
Save ryosuzuki/2749f3da0c92fd5b07c5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<style> | |
body { | |
font: 10px sans-serif; | |
} | |
.axis path, | |
.axis line { | |
fill: none; | |
stroke: #000; | |
shape-rendering: crispEdges; | |
} | |
.bar { | |
fill: steelblue; | |
} | |
.x.axis path { | |
display: none; | |
} | |
</style> | |
<body> | |
<script src="http://d3js.org/d3.v3.min.js"></script> | |
<script> | |
var hash = { | |
AL: [310504,552339,259034,450818,1231572,1215966,641667], | |
AK: [ 52083, 85640, 42153, 74257, 198724, 183159, 50277], | |
AZ: [515910,828669,362642,601943,1804762,1523681,862573] | |
}; | |
var margin = {top: 20, right: 20, bottom: 30, left: 40}, | |
width = 960 - margin.left - margin.right, | |
height = 500 - margin.top - margin.bottom; | |
var x = d3.scale.linear() | |
.rangeRound([width, 0]); | |
var y = d3.scale.ordinal() | |
.rangeRoundBands([0, height], .1); | |
var color = d3.scale.ordinal() | |
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]); | |
var xAxis = d3.svg.axis() | |
.scale(x) | |
.orient("bottom") | |
.tickFormat(d3.format(".0%")); | |
var yAxis = d3.svg.axis() | |
.scale(y) | |
.orient("left"); | |
// .tickFormat(d3.format(".2s")); | |
var svg = d3.select("body").append("svg") | |
.attr("width", width + margin.left + margin.right) | |
.attr("height", height + margin.top + margin.bottom) | |
.append("g") | |
.attr("transform", "translate(" + margin.left + "," + margin.top + ")"); | |
var datasets = [ | |
{ | |
"username": "ryo", | |
"step-1": 310504, | |
"step-2": 552339, | |
"step-3": 259034, | |
"step-4": 450818, | |
"step-5": 1231572, | |
"step-6": 1215966, | |
"step-7": 641667 | |
}, | |
{ | |
"username": "koji", | |
"step-1": 410504, | |
"step-2": 452339, | |
"step-3": 359034, | |
"step-4": 550818, | |
"step-5": 231572, | |
"step-6": 215966, | |
"step-7": 541667 | |
}, | |
] | |
color.domain(d3.keys(datasets[0]).filter(function(key) { return key !== "username"; })); | |
datasets.forEach(function(d) { | |
var x0 = 0; | |
// d.ages = color.domain().map(function(name) { return {name: name, y0: y0, y1: y0 += +d[name]}; }); | |
// d.total = d.ages[d.ages.length - 1].y1; | |
d.ages = color.domain().map( function (name) { | |
return { | |
name: name, | |
x0: x0, | |
x1: x0 += +d[name] | |
}; | |
}); | |
d.ages.forEach(function (d) { | |
d.x0 /= x0; | |
d.x1 /= x0; | |
}); | |
}); | |
y.domain(datasets.map(function(d) { return d.username; })); | |
// data.sort(function(a, b) { return b.total - a.total; }); | |
svg.append("g") | |
.attr("class", "x axis") | |
.attr("transform", "translate(0," + height + ")") | |
.call(xAxis); | |
svg.append("g") | |
.attr("class", "y axis") | |
.call(yAxis) | |
.append("text") | |
.attr("transform", "rotate(-90)") | |
.attr("y", 6) | |
.attr("dy", ".71em") | |
.style("text-anchor", "end") | |
var username = svg.selectAll(".username") | |
.data(datasets) | |
.enter().append("g") | |
.attr("class", "g") | |
.attr("transform", function(d) { return "translate(0, " + y(d.username) + ")"; }); | |
username.selectAll("rect") | |
.data(function(d) { return d.ages; }) | |
.enter().append("rect") | |
.attr("height", y.rangeBand()) | |
.attr("x", function(d) { return x(1-d.x0); }) | |
// .attr("height", function(d) { return y(d.y0) - y(d.y1); }) | |
.attr("width", function(d) { return x(d.x0) - x(d.x1); }) | |
.style("fill", function(d) { return color(d.name); }); | |
/* | |
d3.csv("data.csv", function(error, data) { | |
window.data = data | |
color.domain(d3.keys(data[0]).filter(function(key) { return key !== "State"; })); | |
data.forEach(function(d) { | |
var x0 = 0; | |
// d.ages = color.domain().map(function(name) { return {name: name, y0: y0, y1: y0 += +d[name]}; }); | |
// d.total = d.ages[d.ages.length - 1].y1; | |
d.ages = color.domain().map(function(name) { return {name: name, x0: x0, x1: x0 += +d[name]}; }); | |
d.ages.forEach(function(d) { d.x0 /= x0; d.x1 /= x0; }); | |
}); | |
// data.sort(function(a, b) { return b.total - a.total; }); | |
data.sort(function(a, b) { return b.ages[0].x1 - a.ages[0].x1; }); | |
y.domain(data.map(function(d) { return d.State; })); | |
// y.domain([0, d3.max(data, function(d) { return d.total; })]); | |
svg.append("g") | |
.attr("class", "x axis") | |
.attr("transform", "translate(0," + height + ")") | |
.call(xAxis); | |
svg.append("g") | |
.attr("class", "y axis") | |
.call(yAxis) | |
.append("text") | |
.attr("transform", "rotate(-90)") | |
.attr("y", 6) | |
.attr("dy", ".71em") | |
.style("text-anchor", "end") | |
.text("Population"); | |
var state = svg.selectAll(".state") | |
.data(data) | |
.enter().append("g") | |
.attr("class", "g") | |
.attr("transform", function(d) { return "translate(0, " + y(d.State) + ")"; }); | |
state.selectAll("rect") | |
.data(function(d) { return d.ages; }) | |
.enter().append("rect") | |
.attr("height", y.rangeBand()) | |
.attr("x", function(d) { return x(1-d.x0); }) | |
// .attr("height", function(d) { return y(d.y0) - y(d.y1); }) | |
.attr("width", function(d) { return x(d.x0) - x(d.x1); }) | |
.style("fill", function(d) { return color(d.name); }); | |
var legend = svg.selectAll(".legend") | |
.data(color.domain().slice().reverse()) | |
.enter().append("g") | |
.attr("class", "legend") | |
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; }); | |
legend.append("rect") | |
.attr("x", width - 18) | |
.attr("width", 18) | |
.attr("height", 18) | |
.style("fill", color); | |
legend.append("text") | |
.attr("x", width - 24) | |
.attr("y", 9) | |
.attr("dy", ".35em") | |
.style("text-anchor", "end") | |
.text(function(d) { return d; }); | |
}); | |
*/ | |
</script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment