2016-07-05 47 views
0

我正在用酒窩js製作圖表,並嘗試調整工具提示。我想出瞭如何添加「性別」和「生存率」。現在我想添加存儲在flatgroups對象中的生存計數。我怎樣才能做到這一點?下面的努力(for循環)似乎並不奏效。它給了我一個錯誤,說flatgroups對象是未定義的,它不能佔用未定義對象的長度。謝謝!酒窩工具提示添加自定義文本

function draw_bar(data) { 
    var svg = dimple.newSvg("#chart1", 800, 600); 

// Group/nest data by gender and calculate survival rate and number of people that survived per gender 
var grouped_data = d3.nest() 
       .key(function (d) {return d.Sex;}) 
       .rollup(function (v) {return {"Survival Rate": d3.mean(v, 
                     function (d) { 
                      return d.Survived; 
                        } 
                    ), 
               "Survival Count": d3.sum(v, 
                     function (d) { 
                      return d.Survived; 
                        } 
                    ) 
              }; 
            } 
         ) 
       .entries(data); 

    // flatten the data structure stored in grouped_data 
    var flatgroups = []; 
    grouped_data.forEach(function (group) { 
      flatgroups.push({ 
         "Gender": group.key, 
         "Survival Rate": group.values["Survival Rate"], 
         "Survival Count": group.values["Survival Count"] 
         }); 
        }); 

    // Construct chart, set axis labels and draw it 
    var chart = new dimple.chart(svg, flatgroups); 
    var x = chart.addCategoryAxis("x", "Gender"); 
    x.title = "Gender"; 
    var y = chart.addMeasureAxis("y", "Survival Rate"); 
    y.title = "Survival Rate"; 
    // Format y-axis to show proportions with 2 decimals 
    y.tickFormat = ',.2f'; 
    var series = chart.addSeries("Gender", dimple.plot.bar); 
    series.getTooltipText = function (e) { 
         var key = e.key; 
         for (i in flatgroups) { 
          if (i.key == key) { 
           return [ "Gender" + ": " + e.cx, 
        "Survival Rate" + ": " + (e.cy).toFixed(2), 
        "Survival Count" + ": " + i["Survival Count"] 

             ]; 
                  }; 
         }; 
    }; 
    chart.assignColor("female", "red") 
    chart.assignColor("male", "blue") 
    chart.draw(); 

回答

0

flatgroups是一組對象。當你用for (i in flatgroups)迭代它時,你迭代的是整數數組鍵。換句話說,中i在這個for循環中的值會01

你可以做這裏只是添加像var group = flatgroups[i];線爲for循環中的第一道防線。然後使用group(實際的組對象)來引用組而不是i(整數鍵)。

我懷疑你還需要將行if (i.key == key)更改爲更類似於if (group.Gender == key)的東西,因爲key似乎不是您創建的對象中的實際鍵之一。

+0

您可能還想爲'(for flatgroups)中的(var i)'而不是'for(i in flatgroups)'。請參閱JavaScript中的「for-in」循環中的「var」或no「var」](http://stackoverflow.com/questions/5717126)。 –