Uncaught TypeError: d3.pack().sort не является функцией

Я новичок в Javascript и D3.js, и в настоящее время я пытаюсь построить пузырьковую диаграмму в d3.js, используя приведенный здесь пример https://jrue.github.io/coding/2014/exercises/basicbubblepackchart/ и изменив его в соответствии с моим заданием. Я знаю, что приведенный выше пример был написан в предыдущей версии d3, и я использую версию v4, где синтаксис немного изменился, однако при запуске программы я получаю следующую ошибку:

Uncaught TypeError: d3.pack(...).sort не является функцией

var diameter = 500, //max size of the bubbles
color    = d3.scaleOrdinal(d3.schemeCategory10); //color category

var bubble = d3.pack()
.sort()
.size([diameter, diameter])
.padding(1.5);

var svg = d3.select("body")
.append("svg")
.attr("width", diameter)
.attr("height", diameter)
.attr("class", "bubble");

d3.csv("teams.csv", function(error, data){

data = data.map(function(d){ d.value = +d["Amount"]; return d; });

var nodes = bubble.nodes({children:data}).filter(function(d) { return !d.children; });

//setup the chart
var bubbles = svg.append("g")
    .attr("transform", "translate(0,0)")
    .selectAll(".bubble")
    .data(nodes)
    .enter();

bubbles.append("circle")
    .attr("r", function(d){ return d.r; })
    .attr("cx", function(d){ return d.x; })
    .attr("cy", function(d){ return d.y; })
    .style("fill", function(d) { return color(d.value); });

bubbles.append("text")
    .attr("x", function(d){ return d.x; })
    .attr("y", function(d){ return d.y + 5; })
    .attr("text-anchor", "middle")
    .text(function(d){ return d["Team"]; })
    .style({
        "fill":"black", 
        "font-family":"Helvetica Neue, Helvetica, Arial, san-serif",
        "font-size": "12px"
    });

В чем проблема?


person ViniLL    schedule 16.10.2017    source источник
comment
Метода sort() для d3.pack() не существует. Вместо этого вам придется отсортировать иерархию.   -  person Gerardo Furtado    schedule 16.10.2017


Ответы (1)


Обязательно используйте ту же версию d3, что и автор в примере (похоже, вы хорошо разбираетесь в синтаксисе). Кроме того, это «d3.layout.pack().sort(null)» :)

person Steven Black    schedule 16.10.2017
comment
Привет, Стивен, спасибо, но у меня на ноутбуке установлен d4, и я хочу запустить свой пример именно в этой версии... поэтому я удалил layout из d3.layout.pack и даже набрал sort.(null) ' Я все еще получаю ту же ошибку. Если я оставлю код таким же, как в примере, я получу следующую ошибку: Невозможно прочитать пакет свойства undefined - person ViniLL; 16.10.2017
comment
Это понятно, ваша ошибка, по-видимому, указывает на то, что d3 не загружается, когда работает этот бит JavaScript. Что вы используете для размещения? Может быть, дайте мне некоторую информацию о том, как выглядит ваша установка - person Steven Black; 16.10.2017
comment
Я использую простой html-файл и пишу код в режиме разработчика в Chrome. Вот что у меня есть в моем файле: ‹html› ‹head› ‹script type=text/javascript src=d3js.org/d3.v4.min.js›‹/script› ‹/head› ‹body› ‹p›Hello!‹/p› ‹/body› ‹/html› а потом я просто использую встроенную консоль, где я пишу свой код - person ViniLL; 16.10.2017
comment
Это настройка, если вы только начинаете, я бы рекомендовал использовать codepen, чтобы освоиться с javascript и d3. . Если вы действительно хотите выполнять JavaScript на своем компьютере, вам понадобится способ локального размещения файла browsersync. и python предлагают простые варианты - person Steven Black; 16.10.2017
comment
Если бы у OP была неправильная ссылка на D3, ошибка была бы только d3 is not defined. Ошибка ясно показывает, что D3 загружается правильно. Проблема в том, что нет метода sort() для d3.pack(). - person Gerardo Furtado; 16.10.2017
comment
Хорошо, спасибо за предложения. Итак, я пытаюсь использовать codepen прямо сейчас, но когда я нажимаю кнопку запуска, ничего не происходит, я не вижу никакого вывода моей программы... И я также думаю, что мне нужно изменить часть моего кода, где я анализирую данные из файла csv, так как он находится на моей локальной машине. Как я могу прочитать это с помощью codepen? - person ViniLL; 16.10.2017
comment
Я также пытался использовать сервис repl.it и загружать туда свой код, но все равно получаю ту же ошибку. Не могли бы вы объяснить, что может быть не так с этой функцией d3.pack()? - person ViniLL; 16.10.2017
comment
Попробуйте этот пример, bl.ocks.org/mbostock/4063269 он использует d3.v4, что является версией Я уверен, что вы используете. Также документация для d3.pack() находится здесь и выглядит как они убрали функцию sort() - person Steven Black; 16.10.2017
comment
Спасибо Стивену Блэку и Херардо Фуртадо. Я нашел способ запустить свой код и получить правильный вывод с помощью jsfiddle. И да, похоже, в d3.v4 многое изменилось. - person ViniLL; 17.10.2017