Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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_D3.js - Fatal编程技术网

Javascript 未为对象类型定义数据d3

Javascript 未为对象类型定义数据d3,javascript,d3.js,Javascript,D3.js,我正在修改Matthew Weber link制作的交互式图表,在尝试创建唯一键以将数据绑定到图表时,我不断遇到数据未定义的错误。我一直在犯错误 TypeError: data is undefined 我认为问题源于这样一个事实,即我使用数字值age作为x轴,而不是他的示例中解析的日期,但我不知道要修改什么来修复它 我还在上面的几行中声明了数据变量,d3似乎无法识别它 我的代码如下 代码段:错误发生在color.domain开头 var menu = d3.select("#

我正在修改Matthew Weber link制作的交互式图表,在尝试创建唯一键以将数据绑定到图表时,我不断遇到数据未定义的错误。我一直在犯错误

TypeError: data is undefined
我认为问题源于这样一个事实,即我使用数字值age作为x轴,而不是他的示例中解析的日期,但我不知道要修改什么来修复它

我还在上面的几行中声明了数据变量,d3似乎无法识别它

我的代码如下

代码段:错误发生在color.domain开头

        var menu = d3.select("#menu select")
    .on("change", change);    

//suck in the data, store it in a value called formatted, run the redraw function
// *****
d3.csv("data.csv", function(data) {
                                    formatted = data;
                                    redraw();
                                  });

d3.select(window)
    .on("keydown", function() { altKey = d3.event.altKey; })
    .on("keyup", function() { altKey = false; });
var altKey;

// set terms of transition that will take place
// when a new economic indicator is chosen   
function change() {
  d3.transition()
      .duration(altKey ? 7500 : 1500)
      .each(redraw);
}

// all the meat goes in the redraw function
function redraw() { 

    // create data nests based on economic indicator (series)
    // *****
    var nested = d3.nest()
        .key(function(d) { return d.dma; })
        .map(formatted)

    // get value from menu selection
    // the option values are set in HTML and correspond
    //to the [type] value we used to nest the data  
    var series = menu.property("value");

    // only retrieve data from the selected series, using the nest we just created
    var data = nested[series];

    // for object constancy we will need to set "keys", one for each type of data (column name) exclude all others.
    // *****
    color.domain(d3.keys(data[0]).filter(function(key) { return (key !== "age" && key !== "dma"); }));
    // *****
    var linedata = color.domain().map(function(name) {
                    return {name: name,
                            values: data.map(function(d) {
                            return {name:name, age: d.age, value: parseFloat(d[name],10)};
                            })
                    };
    });

问题在于:

var data = nested[series];
“序列”设置为“道岔”,因为这是菜单选择元素的默认值

我想你可能想做以下改变

改变

<p id="menu" class="menuchoice">Select series: <select>
<option value="turnout">Model 1</option>
 <option value="unsure">Model 2</option>
<option value="fiscal">Model 3</option>
 <option value="social">Model 4</option>
致:

你会看到一些东西。我不确定这是否就是你想要的。这就是我在评论中所怀疑的,当时我说我猜你没有更新页面的html,特别是菜单选择元素来匹配你的数据

您可能希望以另一种方式实现这一点,您的选择系列:组合框为[Model1、Model2、Model3、Model4],图表有9行dma1到dma9,但从您的代码来看,您的意图与我的做法相同


如果是另一种情况,则必须更改嵌套参数,并再次更新菜单选择元素的html。

是否可以验证嵌套和系列实际上是使用预期值/属性定义的?由于您报告的数据是未定义的异常,这意味着数据没有设置任何值。您可以显示CSV文件中的几行吗?@David,我的数据中的几行如下数据是逗号分隔的年龄,dma,model1,model2,model3,model4 18,FT.MYERS-NAPLES dma EST.,0.095,0.425,0.371,0.152 18,杰克逊维尔DMA东部,0.043,0.409,0.386,0.13218,迈阿密DMA东部,0.041,0.452,0.359,0。182@Jason我没有用嵌套的[series];;定义数据吗;?在重画函数之前,我将数据包装在d3.csv函数中。我编辑了我的帖子来反映这一点。ThanksAn的例子将有助于解决问题。你能发布一个链接到你的页面/代码吗?查看您在上一条评论中发布的示例csv文件,它似乎与您的代码不匹配。在color.domain中,您过滤掉了类型和日期,但它们似乎不是csv数据的一部分。也许您还没有完全转换您发布的示例以匹配您的数据集?我猜你还没有更新页面的html,特别是菜单选择元素来匹配你的数据。谢谢Ben,我会调查的!快速提问,如果我想更改嵌套的并更新menu select元素的html,我还可以传递哪些参数?要更新select元素,只需更改html即可。如果您想更新嵌套,而不是按dma嵌套,而是按模型嵌套,那么您可能需要在d3.csv调用的函数回调中更改初始数据结构。格式需要更改,因此数组中的每个条目只占一个模型,而不是像您目前拥有的所有4个。
<p id="menu" class="menuchoice">Select series: <select>
<option value="dma1">DMA 1</option>
<option value="dma2">DMA 2</option>
<option value="dma3">DMA 3</option>
<option value="dma4">DMA 4</option>
<option value="dma5">DMA 5</option>
<option value="dma6">DMA 6</option>
<option value="dma7">DMA 7</option>
<option value="dma8">DMA 8</option>
<option value="dma9">DMA 9</option>

</select>