Я застрял в этой проблеме в течение нескольких дней.
Итак, у меня есть набор данных объектов следующего вида:
dataset = [{metric:"revenue",value:0.03},{metric:"sales", value:0.15},{metric:"churn", value: 0.06},{metric:"logins", value: 0.45}]
Следующий код будет отображать 4 метрических имени в шаблоне сетки (meshy, meshx - это точки координат сетки, а meshsize - размер сетки, поэтому это просто помещает текст в середину квадрата сетки ):
svg.selectAll("text")
.data(dataset)
.enter()
.append("text")
.text(function(d){
return d.metric;
})
.attr("y",function(d,i){
return meshy[i] + meshsize/2;
})
.attr("x", function(d,i){
return meshx[i] + meshsize/2;
})
.attr("font-size",25)
.attr("font-family","serif")
.attr("text-anchor","middle")
.attr("font-weight","bold");
Теперь я хотел бы поставить значение метрики прямо под именем метрики следующим образом:
svg.append("text")
.data(dataset)
.text(function(d){
return (d.value);
})
.attr("y",function(d,i){
return meshy[i] + meshsize/2 + 20;
})
.attr("x", function(d,i){
return meshx[i] + meshsize/2 ;
})
.attr("font-size",25)
.attr("font-family","serif")
.attr("text-anchor","middle")
.attr("font-weight","bold");
Но это только возвращает значение под именем метрики для FIRST-метрики, другие 3-значные тексты даже не в DOM. Я попробовал несколько подходов, включая замену .text на .html, как описано здесь: https://github.com/mbostock/d3/wiki/Selections#wiki-html без успеха. Я также попытался добавить элементы абзаца вместо этого - это работает, но элементы p расположены ниже тела svg в списке без очевидного способа переместить их в нужное положение. Вышеприведенный код ближе всего подходит для получения того, что мне нужно, но по какой-то причине появляется только первый текст значения. Тем не менее, я открыт для любого подхода в d3, который выполняет задание: 4 метрических имени со значениями, расположенными под ними