Как получить доступ к исходным данным после применения d3.stratify ()? - PullRequest
1 голос
/ 11 января 2020

У меня большой 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 для создания древовидной диаграммы. После построения иерархии с помощью d3.stratify я пытаюсь получить доступ к исходным значениям id и value из CSV:

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, " "); 
      })

Использование d.id успешно возвращает значение id, но ведение журнала d.value дает undefined.

Вот исполняемый файл CodeSandbox , демонстрирующий проблему.

1 Ответ

3 голосов
/ 13 января 2020

При создании иерархии с использованием оператора стратификации d3.stratify исходные данные сохраняются в свойстве узлов .data. Вам нужно получить доступ к этому свойству, чтобы получить ваши значения. Свойство id, которое вы видели на узлах, представляет собой красную сельдь, поскольку это внутренний идентификатор , созданный D3 * 100 с помощью метода доступа stratify.id(). Поскольку вы не указали метод доступа самостоятельно, по умолчанию используются пики, в которых используется уже существующее свойство .id. По этой причине внутренний идентификатор равен вашему исходному идентификатору; однако в других случаях, когда используется другой метод доступа, это может быть любой искусственно созданный идентификатор.

Чтобы получить доступ к исходным значениям, вам всегда следует вместо этого прибегать к свойству .data узлов. Для вашего кода это будет:

nodes.append("text")
  .text(function(d) { 
    const data = d.data;   // The .data property contains your original values
    console.log(data.id + " " + data.value);
    // ...
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...