I am trying to generate a bar chart with d3.js in angular.js - ionic app.The bar positioning is incorrect.Here is the screen shot
But I need similar to this
Here is the javascript code
var margin = {top: 20, right: 20, bottom: 30, left: 40},
width = $("#chart_div").width() - margin.left - margin.right,
height = $("#chart_div").height() - margin.top - margin.bottom;
var x = d3.scale.ordinal()
.rangeRoundBands([0, width], .1);
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);
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 data = [{"scenario":"Expected","hours":32},{"scenario":"Actual","hours":16}];
x.domain(data.map(function(d) { return d.scenario; }));
y.domain([0, d3.max(data, function(d) { return d.hours; })]);
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("Hours");
svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.scenario); })
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.hours); })
.attr("height", function(d) { return height - y(d.hours); });
function type(d) {
d.hours = +d.hours;
return d;
}
Created fiddle is at d3 chart Please help me out
When I encountered this same problem, I realized that the "rect" wasn't taking the right dimensions of width and height.
Try to change the bar class (change the name) which is probably in conflict with another existing one in your css library.