I want to draw an axis with major and minor ticks that cover my whole page styled differently. I followed structure of this example, but I can't get it to work make different between major and minor ticks
lines. Here is a picture represent what I'm looking for:
This is my code:
// Define identity (1:1) scales
var x = d3.scale.identity().domain([0, 400]);
var y = d3.scale.identity().domain([0, 300]);
// Define container
var chart = d3.select("body")
.append("svg")
.attr("class", "chart")
.attr("width", 500)
.attr("height", 400)
.append("g")
.attr("transform", "translate(40,20)");
// Draw X-axis grid lines
chart.selectAll("line.x")
.data(x.ticks(50))
.enter().append("line")
.attr("class", "minor")
.attr("x1", x)
.attr("x2", x)
.attr("y1", 0)
.attr("y2", 300)
.style("stroke", "#ccc");
// Draw Y-axis grid lines
chart.selectAll("line.y")
.data(y.ticks(50))
.enter().append("line")
.attr("class", "minor")
.attr("x1", 0)
.attr("x2", 400)
.attr("y1", y)
.attr("y2", y)
.style("stroke", "#ccc");
// Define stock x and y axis
var xAxis = d3.svg.axis().scale(x).orient('top');
var yAxis = d3.svg.axis().scale(y).orient('left');
chart.append('g')
.attr("class", "axis")
.call(xAxis);
chart.append('g')
.attr("class", "axis")
.call(yAxis);
In this case I don't know if I missed some thing?
Complete jsfiddle here.
答案 0 :(得分:1)
我已经改变了你的小提琴,请看这里http://jsfiddle.net/17ubhxqw/1/
您需要做的就是弄清楚您想要更暗线的间隔,并在x和y网格声明中返回不同的颜色:
// Draw X-axis grid lines
chart.selectAll("line.x")
.data(x.ticks(50))
.enter().append("line")
.attr("class", "minor")
.attr("x1", x)
.attr("x2", x)
.attr("y1", 0)
.attr("y2", 300)
.style("stroke", function(d,i){
if (d%50 !== 0) {
return "#ccc";
}else {
return "#666";
}
});
// Draw Y-axis grid lines
chart.selectAll("line.y")
.data(y.ticks(50))
.enter().append("line")
.attr("class", "minor")
.attr("x1", 0)
.attr("x2", 400)
.attr("y1", y)
.attr("y2", y)
.style("stroke", function(d,i){
if (d%50 !== 0) {
return "#ccc";
}else {
return "#666";
}
});
希望这有帮助。
答案 1 :(得分:0)
这样做的新方法是拥有多个轴,一个用于主要刻度线,另一个用于次要刻度轴。您可以选择同样出现在次要轴上的刻度线并删除它们。
svg.append("g")
.attr("class", "grid")
.attr("transform", "translate(0," + height + ")")
.call(d3.svg.axis().scale(x).ticks(20).tickSize(-height))
.selectAll(".tick")
.data(x.ticks(10), function(d) { return d; })
.exit()
.classed("minor", true);
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(0," + height + ")")
.call(d3.svg.axis().scale(x).ticks(10));
更多信息here。