Для этого вам нужно понять, как работает d3.map()
.
Карта d3 создает пары записей ключей, map.get("key")
возвращает значение, связанное с этим ключом. Для создания записи на карте мы используем map.set("key",value)
. В своем блоке кода вы используете:
unemployment.set(d.id, +d.rate, d.county, d.state);
Где unemployment
- ваша карта, а d
- строка в ТСВ. Используя это, мы устанавливаем значение, связанное с каждым ключом (d.id
), равным d.rate
, что является только одной частью данных, которые мы хотим получить в исходном примере. Дополнительные параметры d.county
и d.state
здесь игнорируются.
Вместо этого мы могли бы использовать:
unemployment.set(d.id, d);
Это установит ключ равным d.id
, как указано выше, но теперь значением является вся строка tsv, которую мы хотим:
unemployment.get("06071"); // { id: "06071", rate: "6.2", state: "CA", county: "San Bernardino County" }
В исходном примере значением на карте была строка, но теперь это объект, представляющий строку в tsv, поэтому нам нужно обратиться к нескольким строкам в исходном примере:
.attr("fill", function(d) { return color(unemployment.get(d.id)); })
Становится:
.attr("fill", function(d) { return color(unemployment.get(d.id).rate); })
Так как нам нужно получить доступ к свойству rate сопоставленного значения.
А для всплывающей подсказки мы можем использовать:
.text(function(d) { var datum = unemployment.get(d.id); return "ID: " + datum.id + " - " + datum.county + ", " + datum.state + " - " + "Rate: " + datum.rate + "%"; });
Что дает нам это .