2014-05-23 76 views
4

我收到了一個我實際上不理解的錯誤。我試圖使用這裏描述的餅圖https://gist.github.com/enjalot/1203641,並將其添加爲我的程序中的一個選項。獲取TypeError:.selectAll(...)。輸入不是帶d3.js的函數

function chart (div) { 


var width = 300, 
height = 300, 
radius = 100, 
color = d3.scale.category20c(); 


div.each(function() { 

    var div = d3.select(this); 
    var g = div.select('g'); 

    var vis,arc,pie,arcs; 

    if (g.empty()) { 

    vis = div.append("svg:svg") 
      .data(group.top(18)) 
      .classed('barchart', true) 
      .attr("width",width + margin.left + margin.right) 
      .attr('height', height + margin.top + margin.bottom) 
      .append('svg:g') 
      .attr('transform', 'translate(' + (margin.left+radius) + ',' + (margin.top+radius) + ')'); 

    arc = d3.svg.arc() 
      .outerRadius(radius); 

    pie = d3.layout.pie() 
      .value(function(d) { return d.value; }); 

    arcs = vis.selectAll("g.slice") 
      .enter() 
      .append("svg:g") 
      .attr("class", "slice"); 

    arcs.append("svg:path") 
      .attr("fill", function(d, i) { return color(i); }) 
      .attr("d", arc); 

    arcs.append("svg:text") 
      .attr("transform", function(d) { 
       d.innerRadius = 0; 
       d.outerRadius = radius; 
       return "translate(" + arc.centroid(d) + ")"; 
      }) 
      .attr("text-anchor", "middle"); 
      //.text(function(d, i) { return data[i].label; }); 
    } 

當我運行我的腳本,我得到這樣的:類型錯誤:vis.selectAll(...)輸入的是不是一個函數 在我的index.html我有d3.js所以它應該能夠訪問資源。

我在這裏不知所措,所以如果你們可以幫助我,那會很棒!非常感謝,祝你有美好的一天!

+0

你沒有任何數據綁定到選擇,所以沒有進入選擇。這是錯誤信息的含義。 –

回答

6

在調用selectAll()並調用enter()之前,必須將數據附加到將通過調用data()創建的對象。 例如:

arcs = vis.selectAll("g.slice") 
      .data(dataset) 
      .enter() 
      .append("svg:g") 
      .attr("class", "slice"); 

,其中數據集的數據的陣列,例如:

dataset = [1,2,3,4] 
相關問題