d3.js horizontal bar graph with positive and negative values - move y axis labels to far left side of graph -
on horizontal bar graph positive , negative values, y axis sit somewhere mid page, how move y axis labels far left side. taking jsfiddle example, can move foo, bar, etc. away y axis far left side of graph?
https://jsfiddle.net/kavitha_2817/fmr1x1gu/18/
var margin = {top: 30, right: 10, bottom: 50, left: 50}, width = 500, height = 300; var data = [{value: -10, dataset:"barbaz"}, {value: 40, dataset:"barbar"}, {value: -10, dataset:"foobaz"}, {value: -50, dataset:"foobar"}, {value: 30, dataset:"baz"}, {value: -20, dataset:"bar"}, {value: -70, dataset:"foo"}]; // add svg 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 + ')');
// set ranges
var y = d3.scaleband() .range([height, 0]) .padding(0.1); var x = d3.scalelinear() .range([0, width]); // scale range of data in domains x.domain(d3.extent(data, function (d) { return d.value; })); y.domain(data.map(function (d) { return d.dataset; })); // append rectangles bar chart svg.selectall(".bar") .data(data) .enter().append("rect") .attr("class", function (d) { return "bar bar--" + (d.value < 0 ? "negative" : "positive"); }) .attr("x", function (d) { return x(math.min(0, d.value)); }) .attr("y", function (d) { return y(d.dataset); }) .attr("width", function (d) { return math.abs(x(d.value) - x(0)); }) .attr("height", y.bandwidth()); // add x axis svg.append("g") .attr("transform", "translate(0," + height + ")") .call(d3.axisbottom(x)); // add y axis svg.append("g") .attr("class", "y axis")
you can achieve moving ticks manually:
// add y axis let yaxisgroup = svg.append("g") .attr("class", "y axis") .attr("transform", "translate(" + x(0) + ",0)") .call(d3.axisright(y)); yaxisgroup.selectall('.tick') .data(data) .select('text') .attr('x', function(d,i){return d.value<0?9:-9}) .style('text-anchor', function(d,i){return d.value<0?'start':'end'})
Comments
Post a Comment