Javascript D3线性标度NaN

Javascript D3线性标度NaN,javascript,d3.js,Javascript,D3.js,下面的代码是我的当前代码。我想将GeoJSON中的数据映射到2到50之间的数字。它返回的唯一东西是NaN shapes.transition() .持续时间(500) .attr(“宽度”,12) .attr(“高度”,功能(d){ if(可选阵列[i]=“位置”){ 返回12; } 如果(可选阵列[i]=“平均年龄”){ var x=d3.scaleLinear() .范围([2,50]) .领域(d.属性、平均年龄); 返回x(d.属性、平均年龄); } }); 在代码的共享部分,为输入数据

下面的代码是我的当前代码。我想将GeoJSON中的数据映射到2到50之间的数字。它返回的唯一东西是NaN

shapes.transition()
.持续时间(500)
.attr(“宽度”,12)
.attr(“高度”,功能(d){
if(可选阵列[i]=“位置”){
返回12;
}
如果(可选阵列[i]=“平均年龄”){
var x=d3.scaleLinear()
.范围([2,50])
.领域(d.属性、平均年龄);
返回x(d.属性、平均年龄);
}
});

在代码的共享部分,为输入数据集中的每个记录重新定义了
x
比例。这是不必要的,并且增加了开销

.attr(“height,[…]”
函数调用之外,
x
刻度只能声明一次

然后,
scaleLinear.domain
函数的参数应该是一个数组,包含在输入数据集中找到的最小值和最大值(库文档中的c.f.)。可以使用实用函数
d3.extent
返回这样的数组(读取:)

假设您的数据集名为
data
,则代码应为:

var x = d3.scaleLinear()
  .range([2, 50])
  .domain(d3.extent(data, function(d) { return d.properties.Average_Age; }));

shapes.transition()
  .duration(500)
  .attr("width", 12)
  .attr("height", function(d) {
    if (optionArray[i] === "location") {
      return 12;
    }

    if (optionArray[i] === "Average_Age") {

      return x(d.properties.Average_Age);
    }
  });

如果
d.properties.Average\u Age
为空,则会导致问题。d.properties.Average\u Age都有一个值,请检查该比例的域必须是一个包含映射到2和50的值的数组,该域将缩放到该范围-如何将一个单值域缩放到两值范围?@andrewiid d.properties.a平均值为33。在这种情况下,您将向标尺传递一个数组,但标尺需要一个单独的数值进行缩放。