Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在D3中转换新数据_Javascript_Json_Csv_D3.js_Transition - Fatal编程技术网

Javascript 无法在D3中转换新数据

Javascript 无法在D3中转换新数据,javascript,json,csv,d3.js,transition,Javascript,Json,Csv,D3.js,Transition,我可以完美地加载和显示数据一次,但任何更新的尝试似乎都失败了 我正在尝试建立一个显示活动的地图。在我的数据csv中,我有纬度、逻辑度和活动时间(0-23)。我正在用新数据更新D3。我的想法是按小时循环浏览数据 我或多或少偷了更新功能。虽然初始调用工作正常,但任何重复调用都只能重新调用已经存在的数据,而不是删除它并添加新数据。这让我相信我没有改变传入的数据 我的更新电话有什么明显的问题吗 function update(data, x) { // DATA JOIN // Join

我可以完美地加载和显示数据一次,但任何更新的尝试似乎都失败了

我正在尝试建立一个显示活动的地图。在我的数据csv中,我有纬度、逻辑度和活动时间(0-23)。我正在用新数据更新D3。我的想法是按小时循环浏览数据

我或多或少偷了更新功能。虽然初始调用工作正常,但任何重复调用都只能重新调用已经存在的数据,而不是删除它并添加新数据。这让我相信我没有改变传入的数据

我的更新电话有什么明显的问题吗

function update(data, x) {
    // DATA JOIN
    // Join new data to any existing data
    var circles = g.selectAll("circle")
        .data(data); //, function(d) { return d; });

    // UPDATE
    // Update old elements as needed.
    circles
        .style("fill", "green")
            .transition()
            .duration(750);

    // ENTER
    // Create new elements
    circles.enter().append("circle")
        .filter(function(d) { return d.hr == x; })
        .attr("cx", function(d) {
            return projection([d.lon, d.lat])[0];
        })
        .attr("cy", function(d) {
            return projection([d.lon, d.lat])[1];
        })
        .attr("r", 0)
        .style("opacity", 0.2)
        .style("fill", "blue")
        .transition()
        .duration(750)
        .ease("linear")
        .attr("r", function(d) {
            return d.radius/2;
        });


    // EXIT
    // Remove old elements
    circles.exit()
        .style("fill", "red")
        .transition()
        .duration(1500)
        .ease("linear")
        .attr("r", 0)
        .remove();
}
从命令行运行:

update(csv_data, 1)
update(csv_data, 5)

似乎您正在尝试按行更改数据

filter(function(d) { return d.hr == x; })
但这只是一个问题

您要做的是过滤数据,然后将其传递给您的选择,这是您对该行执行的操作

.data(data);
我建议在更新功能开始时使用:

function update(data, x) {
    // DATA JOIN
    // Join new data to any existing data

    // filter the data as per x
    data = data.filter(function (d) { return d.hr == x; });

    var circles = g.selectAll("circle")
        .data(data);

    // rest of function
 }

确保删除追加后过滤的行。

您熟悉D3中数据联接的工作方式吗?如果不是,我会看一看。因为您肯定不会更改传入的数据:
.data(data)
行设置选择的数据,并且根据您的函数调用,
csv_data
在调用
update
时是相同的。我可以提供更多帮助(并写下答案)但是我需要查看
csv\u数据中的内容。我正在使用d3.csv拉入数据。格式为lat、lon、radius、hrI获取其他3个,但什么是
hr
?因此数据是一个对象数组,其中每个对象都具有您上面提到的4个属性?更接近!它肯定会增加和转换。但现在如果我按不同的顺序运行它,它会表现得很奇怪。例如,运行update()0,1,2,4与运行它4,2,1,0的结果不同,我也不能回拨,所以我不能返回0,2,0