gpt4 book ai didi

javascript - 旭日可视化中的 d3js 分区布局错误

转载 作者:行者123 更新时间:2023-12-03 08:50:07 25 4
gpt4 key购买 nike

我正在按照 http://bl.ocks.org/mbostock/4063423 中的示例进行操作创建旭日图并收到 Uncaught TypeError: Cannot read property 'length' of undefined 错误,但不确定原因。这是我在错误发生之前记录的内容的图像:

log

index.html:49是返回d.children? d. child :d.条目? d.entries() : d.text? null : d.value.length ? d.value : d.value.entries();在我的分区变量中。我意识到该对象没有 value 键,但我不确定为什么没有或如何解决这个问题,因此我们将不胜感激!请参阅下面的完整代码以及 Google 表格上数据的链接。

https://docs.google.com/spreadsheets/d/1d0T0nFJoLcTYtsuEux5yPqNKWUmS9P1PAyh119RVjsQ/edit#gid=638421312

var width = 960,
height = 700,
radius = Math.min(width, height) / 2,
color = d3.scale.category20c();

var hiearchicalDataScale = d3.scale.linear().range([0,1135840])

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height * .52 + ")");

var partition = d3.layout.partition()
.sort(null)
.size([2 * Math.PI, radius * radius])
.value(function(d) { return 1; })
.children(function(d) {
console.log(d)
return d.children? d.children : d.entries ? d.entries() : d.text? null : d.value.length ? d.value : d.value.entries();
});

var arc = d3.svg.arc()
.startAngle(function(d) { return d.x; })
.endAngle(function(d) { return d.x + d.dx; })
.innerRadius(function(d) { return Math.sqrt(d.y); })
.outerRadius(function(d) { return Math.sqrt(d.y + d.dy); });

d3.tsv("data.tsv", function(error, root) {


var data = root.filter(function(d) {
if(d.OilCum.indexOf("/") === -1 && d.OilCum.indexOf("_") === -1) {
d.OilCum = +d.OilCum
return d
}
})
.map(function(d) {
return { Reservoir: d.Reservoir, OilCum: d.OilCum, Field: d.Field }
})


var hiearchicalData = d3.nest()
.key(function(d) {return d.Reservoir})
.key(function(d) {return d.Field})
.map(data, d3.map)

hiearchicalDataScale.domain([
d3.min(data, function(d) { return d.OilCum}),
d3.max(data, function(d) { return d.OilCum})
])

var path = svg.datum(hiearchicalData).selectAll("path")
.data(partition.nodes)
.enter().append("path")
.attr("display", function(d) { return d.depth ? null : "none"; }) // hide inner ring
.attr("d", arc)
.style("stroke", "#fff")
.style("fill", function(d) {
return color(d.children ? d.key : d.text);
})
.style("fill-rule", "evenodd")
.each(stash);

d3.selectAll("input").on("change", function change() {
var value = this.value === "count"
? function() { return 1; }
: function(d) { return d.OilCum; };

path
.data(partition.value(value).nodes)
.transition()
.duration(1500)
.attrTween("d", arcTween);
});
});

// Stash the old values for transition.
function stash(d) {
d.x0 = d.x;
d.dx0 = d.dx;
}

// Interpolate the arcs in data space.
function arcTween(a) {
var i = d3.interpolate({x: a.x0, dx: a.dx0}, a);
return function(t) {
var b = i(t);
a.x0 = b.x;
a.dx0 = b.dx;
return arc(b);
};
}

最佳答案

问题出在这里:

var partition = d3.layout.partition()
.sort(null)
.size([2 * Math.PI, radius * radius])
.value(function(d) { return 1; })
.children(function(d) {
console.log(d)
return d.children? d.children : d.entries ? d.entries() : d.text? null : d.value.length ? d.value : d.value.entries();
});

当你这么做的时候它就会崩溃

d.children? d.children : d.entries ? d.entries() : d.text? null : d.value.length ? d.value : d.value.entries();

注意,在 d.value.length 中,对于某些值,d.value未定义,因此您会收到错误长度未定义

我改变了这一行:

d.children? d.children : d.entries ? d.entries() : d.text? null : d.value ? d.value.entries() : null;

这里我检查 d.value 是否未定义,如果是,则返回 d.value.entries(),否则返回 null。

关于javascript - 旭日可视化中的 d3js 分区布局错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32716112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com