interactive_bar_chart_lol_leagues
This file contains 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> | |
<html> | |
<head> | |
<meta http-equiv="X-UA-Compatible" content="chrome=1" /> | |
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> | |
<meta http-equiv="Access-Control-Allow-Origin" content="*"/> | |
<meta charset="utf-8"> | |
<script src="https://d3js.org/d3.v3.min.js"></script> | |
</head> | |
<style> | |
body { | |
font: 11px sans-serif; | |
} | |
.axis path, | |
.axis line { | |
fill: none; | |
stroke: #000; | |
shape-rendering: crispEdges; | |
} | |
.dot { | |
stroke: #000; | |
} | |
.tooltip { | |
position: absolute; | |
text-align: center; | |
width: auto; | |
height: auto; | |
padding: 2px; | |
background: white; | |
border: 1px; | |
border-radius: 2px; | |
pointer-events: none; | |
} | |
</style> | |
<body> | |
<script> | |
var data = [ | |
{group: "Iron", rank: "Iron IV", percentage: 0.07}, | |
{group: "Iron", rank: "Iron III", percentage: 0.38}, | |
{group: "Iron", rank: "Iron II", percentage: 0.84}, | |
{group: "Iron", rank: "Iron I", percentage: 1.13}, | |
{group: "Bronze", rank: "Bronze IV", percentage: 2.84}, | |
{group: "Bronze", rank: "Bronze III", percentage: 3.23}, | |
{group: "Bronze", rank: "Bronze II", percentage: 4.38}, | |
{group: "Bronze", rank: "Bronze I", percentage: 6.09}, | |
{group: "Silver", rank: "Silver IV", percentage: 9.56}, | |
{group: "Silver", rank: "Silver III", percentage: 7.91}, | |
{group: "Silver", rank: "Silver II", percentage: 9.01}, | |
{group: "Silver", rank: "Silver I", percentage: 7.17}, | |
{group: "Gold", rank: "Gold IV", percentage: 12.52}, | |
{group: "Gold", rank: "Gold III", percentage: 7.31}, | |
{group: "Gold", rank: "Gold II", percentage: 6.31}, | |
{group: "Gold", rank: "Gold I", percentage: 3.95}, | |
{group: "Platinum", rank: "Platinum IV", percentage: 6.98}, | |
{group: "Platinum", rank: "Platinum III", percentage: 2.82}, | |
{group: "Platinum", rank: "Platinum II", percentage: 1.96}, | |
{group: "Platinum", rank: "Platinum I", percentage: 1.85}, | |
{group: "Diamond", rank: "Diamond IV", percentage: 2.23}, | |
{group: "Diamond", rank: "Diamond III", percentage: 0.77}, | |
{group: "Diamond", rank: "Diamond II", percentage: 0.37}, | |
{group: "Diamond", rank: "Diamond I", percentage: 0.21}, | |
{group: "Top", rank: "Master", percentage: 0.05}, | |
{group: "Top", rank: "GrandMaster", percentage: 0.04}, | |
{group: "Top", rank: "Challenger", percentage: 0.02} | |
]; | |
var margin = {top: 20, right: 20, bottom: 70, left: 40}, | |
width = 960 - margin.left - margin.right, | |
height = 500 - margin.top - margin.bottom; | |
var x = d3.scale.ordinal().rangeRoundBands([0, width], .05); | |
var y = d3.scale.linear().range([height, 0]); | |
var xAxis = d3.svg.axis() | |
.scale(x) | |
.orient("bottom") | |
var yAxis = d3.svg.axis() | |
.scale(y) | |
.orient("left") | |
.ticks(10) | |
.tickFormat( function(d) { return d + "%" } ); | |
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 color = d3.scale.ordinal() | |
.domain(["Iron","Bronze","Silver","Gold","Platinum","Diamond","Top"]) | |
.range(["#3b3c40","#523233","#7f7f7f","#fed800","#e5e4e4","#9bc5db","#826f93"]); | |
var div = d3.select("body").append("div") | |
.attr("class", "tooltip") | |
.style("opacity", 0); | |
x.domain(data.map(function(d) { return d["rank"] })); | |
y.domain([0, d3.max(data, function(d) { return d["percentage"]} )+1]); | |
svg.append("g") | |
.attr("class", "x axis") | |
.attr("transform", "translate(0," + height + ")") | |
.call(xAxis) | |
.selectAll("text") | |
.style("text-anchor", "end") | |
.attr("dx", "-.8em") | |
.attr("dy", "0.5em") | |
.attr("transform", "rotate(-45)" ); | |
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("Percentage of players"); | |
svg.selectAll("bar") | |
.data(data) | |
.enter().append("rect") | |
.attr("x", function(d) { return x(d["rank"]); }) | |
.attr("width", x.rangeBand()) | |
.attr("y", function(d) { return y(d["percentage"]); }) | |
.attr("height", function(d) { return height - y(d["percentage"]); }) | |
.style("fill", function(d) { return color(d["group"]); }) | |
.style("stroke", "black") | |
.style("stroke-width", 0.5) | |
.on("mouseover", function(d) { | |
div.transition() | |
.duration(200) | |
.style("opacity", .9); | |
div.html(d["rank"] + ": " + d["percentage"] + "%") | |
.style("left", (d3.event.pageX) + "px") | |
.style("top", (d3.event.pageY - 28) + "px"); | |
}) | |
.on("mouseout", function(d) { | |
div.transition() | |
.duration(500) | |
.style("opacity", 0); | |
}); | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment