script.js
var w = 200;
var h = 200;
var padding = 8;
var scale_padding = 20;
var dataset = [
[80, 20, 10, 60] ];
var xScale = d3.scale.log()
.domain([10, d3.max(dataset, function (d) {
return (100);
})])
.range([padding + scale_padding, w - padding]);
var yScale = d3.scale.log()
.domain([10, d3.max(dataset, function (d) {
return (100);
})])
.range([h - padding - scale_padding, padding]);
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom")
.tickFormat(function(d) {
if (d < 30 || d == 50 || d >= 100)
return String(d);
return "";
})
.ticks(5);
var yAxis = d3.svg.axis()
.scale(yScale)
.orient("left")
.tickFormat(function(d) {
if (d < 30 || d == 50 || d >= 100)
return String(d);
return "";
})
.ticks(5);
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", function (d) {
var x = Math.min(xScale(d[0]), xScale(d[0] + d[2]));
return x;
})
.attr("y", function (d) {
var y = Math.min(yScale(d[1]), yScale(d[1] + d[3]));
return y;
})
.attr("width", function (d) {
var x2 = Math.max(xScale(d[0]), xScale(d[0] + d[2]));
var x1 = Math.min(xScale(d[0]), xScale(d[0] + d[2]));
return x2 - x1;
})
.attr("height", function (d) {
var y2 = Math.max(yScale(d[1]), yScale(d[1] + d[3]));
var y1 = Math.min(yScale(d[1]), yScale(d[1] + d[3]));
return y2 - y1;
});
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(0," + (h - padding - scale_padding) + ")")
.call(xAxis);
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + (padding + scale_padding) + ",0)")
.call(yAxis);
style.css
.axis text, .origintext {
font: 10px sans-serif;
}
.axis path, .axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}