Skip to content

Instantly share code, notes, and snippets.

@CDEdata
Last active September 19, 2016 09:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CDEdata/90a30f6fc06fef8cbba0e2a9798557ec to your computer and use it in GitHub Desktop.
Save CDEdata/90a30f6fc06fef8cbba0e2a9798557ec to your computer and use it in GitHub Desktop.
Science Comm 16: Bar Chart adding tooltip

adding tooltip

<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://labratrevenge.com/d3-tip/javascripts/d3.tip.v0.6.3.js"></script>
<style>
body {
font: 16px sans-serif;
font-weight: bold;
}
.bar {
fill: steelblue;
}
.bar:hover {
fill: purple;
}
.axis {
font: 10px sans-serif;
}
.axis path, /* path refers to a line */
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.x.axis path {
display: none;
}
.title {
font: 20px sans-serif;
font-weight: bold;
}
/* tooltip CSS */
.d3-tip {
line-height: 1;
font-weight: bold;
padding: 12px;
background: rgba(0, 0, 0, 0.8);
color: #fff;
border-radius: 2px;
}
.d3-tip:after {
box-sizing: border-box;
display: inline;
font-size: 10px;
width: 100%;
line-height: 1;
color: rgba(0, 0, 0, 0.8);
content: "\25BC";
position: absolute;
text-align: center;
}
/* Style northward tooltips differently */
.d3-tip.n:after {
margin: -1px 0 0 0;
top: 100%;
left: 0;
}
</style>
</head>
<body>
<script>
var margin = {
top: 30,
left: 65,
right: 20,
bottom: 50
}
height = 400 - margin.top - margin.bottom
width = 600 - margin.left - margin.right
var svg = d3.select("body").append("svg")
.attr("height", height + margin.top + margin.bottom)
.attr("width", width + margin.left + margin.right)
.append("g") //investigate the effects of removing this
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
//xAxis
var xScale = d3.scale.ordinal()
.rangeRoundBands([width,0], .1);
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom");
var yScale = d3.scale.linear()
.range([height,0])
var yAxis = d3.svg.axis()
.scale(yScale)
.orient("left");
var tip = d3.tip()
.attr("class","d3-tip")
.html(function (d) {
return "<strong>Transit trade:</strong> <span style='color:red'>" + d.ttrade + "</span>";
});
svg.call(tip);
d3.csv("ttrade.csv",type, function(data) {
xScale.domain(data.map(function(d) {return d.year;}));
yScale.domain([0, d3.max(data, function(d) { return +d.ttrade; } )]); //or use yScale.domain([0, 20000]);
//xAxis
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", ".15em")
.attr("transform", "rotate(-35)");
//yAxis
svg.append("g")
.attr("class","y axis")
.call(yAxis);
//x axis label
svg.append("text")
.attr("x", width/2)
.attr("y", height + margin.bottom)
.text("Year");
//y axis label
svg.append("text")
.attr("transform", "rotate(-90)")
//NOTE - we actually rotate our reference point by 90 degrees
//http://www.d3noob.org/2012/12/adding-axis-labels-to-d3js-graph.html gives more detail
.attr("y", 0 - margin.left)
.attr("x",0 - (height / 2))
.attr("dy", "1em")
.style("text-anchor", "middle")
.text("Revenue in Mio. CHF");
//title
svg.append("g")
.attr("class","title")
.append("text")
.attr("x", width/2)
.attr("y", (margin.top / 2))
.attr("text-anchor", "middle")
.text("Commodity transit trade")
svg.selectAll(".bar")
.data(data)
.enter()
.append("rect")
.attr("class", "bar")
.attr("x", function(d) {return xScale(d.year);})
.attr("y", function(d) {return yScale(d.ttrade); })
.attr("width",xScale.rangeBand())
.attr("height", function (d) {return height - yScale(d.ttrade); })
//show and hide tooltip
.on("mouseover", tip.show)
.on("mouseout", tip.hide) ;
});
function type(d) {
d.ttrade = d.ttrade;
return d;
}
</script>
</body>
</html>
year ttrade
2011 19766
2010 19827
2009 14422
2008 14445
2007 10716
2006 8811
2005 5862
2004 4552
2003 2444
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment