Проблема, связанная с ошибками пути, связана с такими строками:
svg.selectAll("path")
.data(data_tri)
.enter().append("path")
.attr("class", "point")
.attr("d", d3.svg.symbol().type("triangle-up").size(function(d){ return scale(d); }))
Вы рассчитываете размер, используя функцию, которая принимает аргумент d
, который, как я предполагаю, должен быть данными от каждого элемента в data_tri
или data_crs
, но d
не определен. Я думаю, что вы хотели сделать это:
.attr("d", function(d){
// d is now each datum
})
Однако, если вы посмотрите на каждый элемент d
, это массив, поэтому этот код:
.size(function(d){ return scale(d); })
выдаст ошибку, потому что входные данные для scale(x)
не должны быть массивом. Я не вижу, где в ваших наборах данных вы указали значение, которое следует масштабировать, поэтому я не могу предложить исправления для этого. Я собираюсь полностью опустить этот бит и просто установить тип фигуры для каждого набора точек:
svg.selectAll("path")
.data(data_tri)
.enter().append("path")
.attr("class", "point")
.attr("d", d3.svg.symbol().type("triangle-up")() )
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
svg.selectAll("path")
.data(data_crs)
.enter().append("path")
.attr("class", "point")
.attr("d", d3.svg.symbol().type("cross")() )
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
Следующая проблема состоит в том, что ваши элементы данных не имеют d.x
и d.y
, они являются массивами из двух элементов, поэтому ваша функция преобразования возвращает translate(undefined, undefined)
. Предполагая, что ваши массивы имеют вид [x, y]
, функция преобразования должна быть
.attr("transform", function(d) { return "translate(" + d[0] + "," + d[1] + ")"; });
Последние два утверждения таковы:
svg.selectAll("path")
.data(data_tri)
.enter().append("path")
.attr("class", "point")
.attr("d", d3.svg.symbol().type("triangle-up")() )
.attr("transform", function(d) { return "translate(" + d[0] + "," + d[1] + ")"; });
svg.selectAll("path")
.data(data_crs)
.enter().append("path")
.attr("class", "point")
.attr("d", d3.svg.symbol().type("cross")() )
.attr("transform", function(d) { return "translate(" + d[0] + "," + d[1] + ")"; });
Теперь вы должны обнаружить, что на диаграмме появляются точки данных, и вы можете приступить к разработке эффективного масштабирования и раскраски диаграммы.