如何使用d3从CSV访问另一列中的数据?

问题描述 投票:1回答:1

我的大型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]引用数据。

javascript csv d3.js hierarchical-data
1个回答
0
投票

[使用分层运算符d3.stratify创建层次结构时,原始数据存储] d3.stratify在节点的2属性中。您需要访问该属性以获得您的值。您在节点上看到的.data属性是一个红色鲱鱼,因为它是D3通过应用.data访问器获得的内部ID id。因为您没有自行指定访问器,所以默认踢将使用一个已经存在的created属性。因此,内部ID等于您的原始ID;对于其他涉及不同访问者的情况,它可以是任何人为构造的ID。

要访问您的原始值,应始终转而使用节点的stratify.id()属性。对于您的代码,它将是:

stratify.id()
© www.soinside.com 2019 - 2024. All rights reserved.