D3.js 版本4中y轴的D3文本标签

D3.js 版本4中y轴的D3文本标签,d3.js,D3.js,嗨,我正在尝试使用v4为d3中的线图设置顺序比例。由于某些原因,刻度无法正确缩放,尽管我已按如下方式缩放: var yTicks = d3.scaleOrdinal() .domain(["apple", "orange", "banana", "grapefruit", "mango"]) .range([0, h]) var xAxis = d3.axisBottom().scale(x).tickSize(-h); // var xAxis = d3.svg.axis().scale(

嗨,我正在尝试使用v4为d3中的线图设置顺序比例。由于某些原因,刻度无法正确缩放,尽管我已按如下方式缩放:

var yTicks = d3.scaleOrdinal()
.domain(["apple", "orange", "banana", "grapefruit", "mango"])
.range([0, h])

var xAxis = d3.axisBottom().scale(x).tickSize(-h);

// var xAxis = d3.svg.axis().scale(x).tickSize(-h).tickSubdivide(true);
var yAxisLeft = d3.axisLeft().scale(yTicks);
// Add the x-axis.
graph.append("svg:g").attr("class", "x axis").attr("transform", "translate(0," + h + ")").call(xAxis);



// add lines
 // do this AFTER the axes above so that the line is above the tick-lines
for (var i = data.length - 1; i >= 0; i--) {
    graph.append("svg:path").attr("d", line(data[i])).attr("class", "data" + (i + 1));
};        

graph.append("svg:g").attr("class", "y axis").attr("transform", "translate(0,0)").call(yAxisLeft);

我所做的工作的完整版本可以在这里的小提琴上找到:

你不能像这里那样设置有序刻度的范围:你必须指定离散值

使用点比例的简单解决方案:

var yTicks = d3.scalePoint()

这是您更新的小提琴:

您不能像这里那样设置顺序刻度的范围:您必须指定离散值

使用点比例的简单解决方案:

var yTicks = d3.scalePoint()

这是您更新的小提琴:

这是预期的行为:

序号范围([范围]) 如果指定了范围,则将序数刻度的范围设置为 指定的值数组。域中的第一个元素将是 映射到范围中的第一个元素,第二个域值映射到 第二个范围值,依此类推如果列表中的元素较少 范围大于域中的范围,比例将从一开始重用值 范围的范围。如果未指定范围,此方法将返回 当前范围

(强调我的,来自)

您只指定了范围中的两个元素,因此,域中的五个值映射到范围中的这两个值(因此是重叠文本)。您可以使用以下内容:

  d3.scaleOrdinal()  
    .domain(["apple", "orange", "banana", "grapefruit", "mango"])
    .range([0, h*0.25, h*0.5, h*0.75, h]
(小提琴:)


但是,Gerardo提供了一种替代方案,不需要您将域中的每个元素映射到范围,这是一种更好的解决方案。

这是预期的行为:

序号范围([范围]) 如果指定了范围,则将序数刻度的范围设置为 指定的值数组。域中的第一个元素将是 映射到范围中的第一个元素,第二个域值映射到 第二个范围值,依此类推如果列表中的元素较少 范围大于域中的范围,比例将从一开始重用值 范围的范围。如果未指定范围,此方法将返回 当前范围

(强调我的,来自)

您只指定了范围中的两个元素,因此,域中的五个值映射到范围中的这两个值(因此是重叠文本)。您可以使用以下内容:

  d3.scaleOrdinal()  
    .domain(["apple", "orange", "banana", "grapefruit", "mango"])
    .range([0, h*0.25, h*0.5, h*0.75, h]
(小提琴:)


但是,Gerardo提供了一种替代方案,它不需要您将域中的每个元素映射到范围,这是一种更好的解决方案。

band在这里不是正确的选择,因为它有带宽。@Andrew Reid感谢我在这里尝试改编Bostock的v3教程。我不知道scaleBand。。谢谢,你是对的,我会更新答案以删除它。@Andrew没关系,OP忽略了我的解决方案。如果乐队规模适合他/她,只需回滚您的编辑。乐队在这里不是正确的选择,因为它有带宽。@安德鲁·里德感谢我在这里尝试改编博斯托克的v3教程。我不知道scaleBand。。谢谢,你是对的,我会更新答案以删除它。@Andrew没关系,OP忽略了我的解决方案。如果乐队规模适合他/她,只需回滚编辑。