1

私はjsonデータを使用して円グラフを作成しています..アークは正常に作成されていますが、色とテキストを取得していません.jsonデータを解析して値を取得していますが、異なる名前に対して異なる色を返していません...同様のケースですテキストも..しかし、コンソールで印刷しようとすると... ...ここに私のコードがあります

        function drawPiechart( dataurl, selector ){

            var width = 130,
            height = 130,
            radius = Math.min(width, height) / 2;

            var color = d3.scale.category20();

            var arc = d3.svg.arc()
                .outerRadius(radius - 10)
                .innerRadius(0);
            /*var arc1 = d3.svg.arc()
                .outerRadius(radius + 10)
                .innerRadius(0);*/

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

            var svg = d3.select(selector).append("svg")
                .attr("width", width)
                .attr("height", height)
              .append("g")
                .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");

            d3.json(dataurl, function(error, data) {
            console.log(data);
              data.HubActivity.hubWorkloadList.forEach(function(d) {
                d.workload = +d.workload;
                console.log(d.workload);
              });
            /*function animateFirstStep(){
                d3.select(this)
                  .transition()            
                    .delay(0)            
                    .duration(1000)
                    .attr("d",arc1)
                    .each("end", animateSecondStep);
            };
            function animateSecondStep(){
                d3.select(this)
                  .transition()
                    .duration(1000)
                    .attr("d", arc);
            };*/
              var g = svg.selectAll(".arc")
                  .data(pie(data.HubActivity.hubWorkloadList))
                .enter().append("g")
                  .attr("class", "arc");

              g.append("path")
                  .attr("d", arc)
                  .style("fill", function(d) { return color(d.trName); });
                  // .on("mouseover", animateFirstStep);

              g.append("text")
                  .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
                  .attr("dy", ".35em")
                  .style("text-anchor", "middle")
                  .style("fill","black")
                  .text(function(d) { console.log( d.workload); });

            }); 
        };





        drawPiechart( "../data/pie0.json", "#workload");

ここに私のjsonデータがあります

{
"HubActivity": {        
    "hubWorkloadList": [
        {
            "trName": "addAccessDateValue",
            "workload": "20.00"
        },
        {
            "trName": "addAddress",
            "workload": "10.00"
        },
        {
            "trName": "getAccessDateValue",
            "workload": "10.00"
        },
        {
            "trName": "getAddress",
            "workload": "10.00"
        },
        {
            "trName": "searchCategory",
            "workload": "10.00"
        },
        {
            "trName": "searchCategoryHierarchy",
            "workload": "10.00"
        },
        {
            "trName": "updateAccessDateValue",
            "workload": "30.00"
        },
        {
            "trName": "updateAddressNote",
            "workload": "10.00"
        },
        {
            "trName": "updateAddressValue",
            "workload": "10.00"
        },
        {
            "trName": "updateAlert",
            "workload": "10.00"
        }
    ]
}
}

エラーが発生した場所を教えてください...

4

1 に答える 1

1

このd3.layout.pie関数は、トップレベルでグラフを描画するために必要な情報を含む新しいデータ構造を作成します。これは、色を選択してテキストを追加するときに使用しているものであり、これが機能しない理由です。探しているデータは、以前の場所ではなくなります。

pie()返される各要素に.dataは、元のデータを含むメンバーがあります。これを使用して、探している情報にアクセスできます。つまり、変更する必要があります

.style("fill", function(d) { return color(d.trName); });

.style("fill", function(d) { return color(d.data.trName); });

テキストについても同様です。

于 2013-03-07T09:43:33.920 に答える