javascript - Hyperlink chart bars using D3 -
javascript - Hyperlink chart bars using D3 -
i using d3 toolkit create stacked bar graph of data. want link bars separate page more detail underlying info bar. can't figure out how turn bars hyperlinks. the code below based on demo have been tinkering with. when inspect code in google chrome looks right bars aren't clickable. tremendous in advance ideas , suggestions on this!
source, attempting add together link google each bar:
<!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="d3.min.js"></script> <script> 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.ordinal() .rangeroundbands([0, width], .1); var y = d3.scale.linear() .rangeround([height, 0]); var color = d3.scale.ordinal() .range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]); var xaxis = d3.svg.axis() .scale(x) .orient("bottom"); 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 + ")"); d3.csv("./data.csv", function(error, data) { color.domain(d3.keys(data[0]).filter(function(key) { homecoming key !== "state"; })); data.foreach(function(d) { var y0 = 0; d.ages = color.domain().map(function(name) { homecoming {name: name, y0: y0, y1: y0 += +d[name]}; }); d.total = d.ages[d.ages.length - 1].y1; }); data.sort(function(a, b) { homecoming b.total - a.total; }); x.domain(data.map(function(d) { homecoming d.state; })); y.domain([0, d3.max(data, function(d) { homecoming 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("xlink:href", function(d) { homecoming "http://www.google.com"; }) .attr("transform", function(d) { homecoming "translate(" + x(d.state) + ",0)"; }); state.selectall("rect") .data(function(d) { homecoming d.ages; }) .enter().append("rect") .attr("width", x.rangeband()) .attr("y", function(d) { homecoming y(d.y1); }) .attr("height", function(d) { homecoming y(d.y0) - y(d.y1); }) .style("fill", function(d) { homecoming color(d.name); }); state.append("a") .attr("xlink:href", "http://www.google.com") ; var legend = svg.selectall(".legend") .data(color.domain().slice().reverse()) .enter().append("g") .attr("class", "legend") .attr("transform", function(d, i) { homecoming "translate(0," + * 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) { homecoming d; }); }); </script>
i'm not sure can add together "a" html mark in svg.
but can add together event on each bar segment:
state.on('click',function(d){ ... great code ... })
javascript d3.js data-visualization
Comments
Post a Comment