Я сделал (сделал) следующий объект:
Теперь я пытаюсь отобразить данные следующим образом: диаграмма рассеяния SV3 D3 с осью х с индикатором «Дети (0–17 лет), проживающие в районах с проблемами преступности или насилия (%)», на По оси Y - показатель «Коэффициенты рождаемости среди подростков» и размер кружков по сравнению с размером их ВВП (показатель «Валовой внутренний продукт (подход с учетом расходов)»).
Я хочу реализовать элемент (я думал, что-то вроде ползунка), чтобы выбрать год данных, которые я хочу отобразить (в каждой стране [0] == 2012 ... [4] == 2016).
Вот так выглядит мой график рассеяния на данный момент:
В настоящее время мой код выглядит так:
function drawScatter(teenArea, teenPreg, GDPData){
var svg = d3.select("body").append("svg").attr("width", "960").attr("height", "500");
var teenArea = teenArea;
var teenPreg = teenPreg;
var GDPData = GDPData;
var dataset = mergeData(teenArea, teenPreg, GDPData)
console.log(dataset)
var margin =
{
top: 35,
right: 20,
bottom: 50,
left: 50
};
var w = +svg.attr("width") - margin.left - margin.right;
var h = +svg.attr("height") - margin.top - margin.bottom;
var g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")") // make new frame inside the svg
var xScale = d3.scaleLinear() // make seperate bins for every country
// .domain([0, d3.max(teenArea, function(d) { return d.Datapoint; })])
.domain([0,20])
.range([0, w]);
var yScale = d3.scaleLinear()
// .domain([0, d3.max(teenPreg, function(d) { return d.Datapoint; })])
.domain([0, 20])
.range([h, 0]);
var sizeScale = d3.scaleLinear()
.domain([0.25, 0.6]) // make the bar colour go from blue to black
.range([5, 50])
var tip = d3.tip() // displays data when hovering
.attr('class', 'd3-tip')
.offset([-20, 0])
.html(function(d) {
return "<strong>GINI Value:</strong> <span style='color:red'>" + d.Value + "</span>";
})
svg.call(tip);
// Add x-axis
g.append("g")
.attr("class", "axis-x")
.attr("transform", "translate(0," + h + ")")
.attr("x", w)
.call(d3.axisBottom(xScale));
// Add y-axis
g.append("g")
.attr("class", "axis-y")
.attr("y", h)
.call(d3.axisLeft(yScale));
// text label for the x axis
g.append("text")
.attr("id", "info")
.attr("transform",
"translate(" + (w/2) + " ," +
(h + margin.top ) + ")")
.style("text-anchor", "middle")
.text("Children (0-17) living in areas with problems with crime or violence (%)");
// text label for the y axis
g.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 0 - margin.left)
.attr("x",0 - (h / 2))
.attr("dy", "1em")
.attr("id", "info")
.style("text-anchor", "middle")
.text("Adolescent fertility rates");
// text label for the x axis
g.append("text")
.attr("id", "title")
.attr("transform",
"translate(" + (w/2) + " ," +
(-20) + ")")
.style("text-anchor", "middle")
.text("Fertility Rate & Living Standards of Teens over various GDPs");
g.selectAll(".bar")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function (d,i) { return x(d[0][i][4]); } )
.attr("cy", function (d,i) { return y(d[1][i][4]); } ) // as a test trying to show data of 2016
.attr("r", 2);
};
К сожалению, на графике рассеяния нет кругов. Даже если я установлю фиксированное число для cx и cy.
Кто-нибудь знает, как это исправить?