1

D3で円グラフを描いています。DBからデータを取得します。サンプル JSON を以下に示します。私のチャートには凡例として SLA コンプライアンスが含まれている必要があり、円グラフは毎月の SLA コンプライアンスの値 (ここでは 100) で描画される必要があります。伝説は順調に来ています。ここで、「SLA コンプライアンス」は、他のラジオ ボタン/ドロップ ダウンをクリックすると、さまざまなチャートで変化するラベルです。コンソールに値を出力すると、Var pie が呼び出されると、その値が未定義になることがわかりました。チャートが表示されません。誰か助けてくれませんか。

サンプル JSON:

[
 {month:"Nov-11", 'SLA Compliance':100},{month:"Dec-11", 'SLA Compliance':100}, 
 {month:"Jan-12", 'SLA Compliance':100}, {month:"Feb-12", 'SLA Compliance':100}, 
 {month:"Mar-12", 'SLA Compliance':100}, {month:"Apr-12", 'SLA Compliance':100
]

コード:

function drawPieChart3(xData,data,svg,index,selectedIndex){
    var width = 400, 
        height = 100,
        radius = Math.min(width, height) / 2;

    var color = d3.scale.category20();

    var arc = d3.svg.arc()
        .outerRadius(radius - 10)
        .innerRadius(0);

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

    var temp= d3.keys(data[0]).filter(function(key) { return key !== "month"; })
    color.domain(d3.keys(data[0]).filter(function(key) { return key !== "month"; })); 

    data.forEach(function(d) {
        d.month=d.month
        d.pieValue = temp.map(function(name) {  
            return {name: name, value: +d[name]}; });


    var g=svg.selectAll(".arc")
        .data(pie(data))
        .enter().append("g")
        .attr("class", "arc");

        g.append("path")
        .attr("d", arc)
        .style("fill", function(d) {return color(d.data.month); 

        g.append("text")
        .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
        .attr("dy", ".35em")
        .style("text-anchor", "middle")
        .text(function(d) {
        return d.data.month; });


    //legend portion 
    alert("11. in legend portion")
    var mylegend = svg.selectAll(".mylegend")
        .data(temp)
        .enter().append("g")
        .attr("class", "legend")
        .attr("transform", function(d, i) { return "translate(0," + (legentCount+i+1) * 20 + ")"; });

   mylegend.append("rect")
        .attr("x", width+40)
        .attr("width", 18)
        .attr("height", 18)
        .style("fill", color);

   mylegend.append("text")
        .attr("x", width+60)
        .attr("y", 9)
        .attr("dy", ".35em")
        .style("text-anchor", "start")
        .text(function(d) { return d; });


  }
4

0 に答える 0