D3轴不使用d3.svg.axis()方法

时间:2014-02-16 13:42:08

标签: javascript charts d3.js

enter image description here我是D3.js的初学者。我需要根据下面的图像绘制一个带有轴的图形。任何工作小提琴都会对我有所帮助。

我检查过以下小提琴,但不确定如何根据我的要求进行调整。

1 个答案:

答案 0 :(得分:0)

您可以创建比例(完全独立于轴)并使用其参数为轴创建svg元素;在您的情况下,水平线和圆+ +文本作为刻度。 具体来说,您可以使用比例range()来获得水平线长度;并且比例ticks(n)用于在比例域中获得n均匀间隔的点。通过将这些点传递给刻度,您可以获得用于刻度线的x坐标。

xScale = d3.scale.linear().domain([0.0, 1.0]).range([0, width]);
var axis = svg.append('g').attr('class', 'xaxis');

axis.append('line').attr({
    'x1': xScale.range()[0],
    'y1': height,
    'x2': xScale.range()[1],
    'y2': height
});

ticks = axis.selectAll('.ticks')
    .data(xScale.ticks(10))
    .enter()
    .append('g')
    .attr('class', 'tick');

ticks.append('circle')
    .attr({
        'cx': function(d) { return xScale(d); },
        'cy': height,
        'r': 5
    });

ticks.append('text')
    .attr({
        'x': function(d) { return xScale(d); },
        'y': height,
        'dy': 20 // Move the text a little under the line
    })
    .text(function(d) { return d; });

这是一个最小的工作JSFiddle:http://jsfiddle.net/LeartS/yGesr/