我的大型csv的结构如下:
id,value
Animal,
Animal.Cat,
Animal.Cat.Female,
Animal.Cat.Female.Domestic,
Animal.Cat.Female.Domestic.Kittn,
Animal.Cat.Female.Domestic.Kittn.Brown,
Animal.Cat.Female.Domestic.Kittn.Brown.Pearl,"Pearl.Cat.Domestic.Brown.Female.Kittn.43529.K19-032349.Ca03.A387384.05/25/2019.05/29/2019.4.Stray.Over_The_Counter.Transfer.Hssc.Treatable/Rehab.Treatable/Rehab.County.County.95407.95407(38.403734,_-122.736775).1"
Animal.Cat.Male,
Animal.Cat.Male.Domestic,
Animal.Cat.Male.Domestic.Small,
Animal.Cat.Male.Domestic.Small.Brown,
Animal.Cat.Male.Domestic.Small.Brown.Elliott,"Elliott.Cat.Domestic.Brown.Male.Small.05/31/2005.K19-032383.Vet.A387892.05/31/2019.05/31/2019.0.Stray.Field.Euthanize..Unknown.Dead.Santa_Rosa.Santa_Rosa.95404.95404(38.458384,_-122.675588).1"
并且我正在使用d3-层次结构来创建树形图。我正在尝试从CSV访问值value
:
nodes.append("text")
.text(function(d) {
var string = d.id.substring(d.id.lastIndexOf(".") + 1);
console.log(d.id + " " + d.value);
return string.replace(/_/g, " ");
})
与ID相同。成功使用d.id
会获得id
值,但登录d.value
会留下undefined
。如果有人可以给我指出我做错了什么的方法,或者是实现此目的的替代方法,那么我将不胜感激。预先感谢。
编辑:CodeSandbox here
此后,我找到了一种方法,可以将整个记录存储在单个条目中,作为id
,然后将它们拆分为:
,然后使用\
而不是.
来拆分value
]记录的一部分。但是,这是一种混乱且尴尬的方式,我已经看到其他人通过d.[header name]
引用数据。
[使用分层运算符d3.stratify
创建层次结构时,原始数据存储] d3.stratify
在节点的2属性中。您需要访问该属性以获得您的值。您在节点上看到的.data
属性是一个红色鲱鱼,因为它是D3通过应用.data
访问器获得的内部ID id
。因为您没有自行指定访问器,所以默认踢将使用一个已经存在的created属性。因此,内部ID等于您的原始ID;对于其他涉及不同访问者的情况,它可以是任何人为构造的ID。
要访问您的原始值,应始终转而使用节点的stratify.id()
属性。对于您的代码,它将是:
stratify.id()