D3仪表板图表数据从json或csv绑定 [英] D3 dashboard chart data bind from json or csv

查看:70
本文介绍了D3仪表板图表数据从json或csv绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是D3图表的新手

我正在使用以下链接中的D3仪表板图表

i am using D3 dashboard chart following link

http://bl.ocks.org/diethardsteiner/3287802

此处数据由变量给出.

here the datas are given by variables.

我不想从变量中获取值,我想从json文件中获取值.

I don't want to get the value from variable and i want to get the value from json file.

在将数据存储在变量中之前.

Before the data are stored in a variable.

################ FORMATS ##################
-------------------------------------------
*/


var     formatAsPercentage = d3.format("%"),
        formatAsPercentage1Dec = d3.format(".1%"),
        formatAsInteger = d3.format(","),
        fsec = d3.time.format("%S s"),
        fmin = d3.time.format("%M m"),
        fhou = d3.time.format("%H h"),
        fwee = d3.time.format("%a"),
        fdat = d3.time.format("%d d"),
        fmon = d3.time.format("%b")
        ;

/*
############# PIE CHART ###################
-------------------------------------------
*/



function dsPieChart(){

    var dataset = [
            {category: "ACC", measure: 0.30},
          {category: "B56", measure: 0.25},
          {category: "MAB", measure: 0.15},

          ]
          ;

    var     width = 400,
           height = 400,
           outerRadius = Math.min(width, height) / 2,
           innerRadius = outerRadius * .999,   

           innerRadiusFinal = outerRadius * .5,
           innerRadiusFinal3 = outerRadius* .45,
           color = d3.scale.category20()    
           ;

    var vis = d3.select("#pieChart")
         .append("svg:svg")             
         .data([dataset])                  
             .attr("width", width)           
             .attr("height", height)
                .append("svg:g")                
             .attr("transform", "translate(" + outerRadius + "," + outerRadius + ")")
                ;

   var arc = d3.svg.arc()             
            .outerRadius(outerRadius).innerRadius(innerRadius);


   var arcFinal = d3.svg.arc().innerRadius(innerRadiusFinal).outerRadius(outerRadius);
    var arcFinal3 = d3.svg.arc().innerRadius(innerRadiusFinal3).outerRadius(outerRadius);

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

   var arcs = vis.selectAll("g.slice")     
        .data(pie)                          
        .enter()                           
            .append("svg:g")                
               .attr("class", "slice")   
               .on("mouseover", mouseover)
                    .on("mouseout", mouseout)
                    .on("click", up)
                    ;

        arcs.append("svg:path")
               .attr("fill", function(d, i) { return color(i); } )
               .attr("d", arc)    
                    .append("svg:title") 
                   .text(function(d) { return d.data.category + ": " + formatAsPercentage(d.data.measure); });          

        d3.selectAll("g.slice").selectAll("path").transition()
                .duration(750)
                .delay(10)
                .attr("d", arcFinal )
                ;

      arcs.filter(function(d) { return d.endAngle - d.startAngle > .2; })
            .append("svg:text")
          .attr("dy", ".35em")
          .attr("text-anchor", "middle")
          .attr("transform", function(d) { return "translate(" + arcFinal.centroid(d) + ")rotate(" + angle(d) + ")"; })

          .text(function(d) { return d.data.category; })
          ;

        function angle(d) {
            var a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;
            return a > 90 ? a - 180 : a;
        }


        // Pie chart title          
        vis.append("svg:text")
            .attr("dy", ".35em")
          .attr("text-anchor", "middle")
          .text("Building")
          .attr("class","title")
          ;         



    function mouseover() {
      d3.select(this).select("path").transition()
          .duration(750)

                    .attr("d", arcFinal3)
                    ;
    }

    function mouseout() {
      d3.select(this).select("path").transition()
          .duration(750)

                    .attr("d", arcFinal)
                    ;
    }

    function up(d, i) {


                updateBarChart(d.data.category, color(i));
                updateLineChart(d.data.category, color(i));

    }
}

dsPieChart();

现在我正在尝试通过以下方式获取数据.

now i am trying to get the data by folowing way.

我不知道这是正确的方法,没有人可以帮助我

I dont know this is correct way or not can anyone help me

################ FORMATS ##################
-------------------------------------------
*/


var     formatAsPercentage = d3.format("%"),
        formatAsPercentage1Dec = d3.format(".1%"),
        formatAsInteger = d3.format(","),
        fsec = d3.time.format("%S s"),
        fmin = d3.time.format("%M m"),
        fhou = d3.time.format("%H h"),
        fwee = d3.time.format("%a"),
        fdat = d3.time.format("%d d"),
        fmon = d3.time.format("%b")
        ;

/*
############# PIE CHART ###################
-------------------------------------------
*/



function dsPieChart(){



    var     width = 400,
           height = 400,
           outerRadius = Math.min(width, height) / 2,
           innerRadius = outerRadius * .999,   
           // for animation
           innerRadiusFinal = outerRadius * .5,
           innerRadiusFinal3 = outerRadius* .45,
           color = d3.scale.category20()    //builtin range of colors
           ;


});

    var vis = d3.select("#pieChart")
         .append("svg") 
        d3.json("readme.json", function(error, root) {
  if (error) throw error;
.data([root])                  
             .attr("width", width)           
             .attr("height", height)
                .append("g")            
             .attr("transform", "translate(" + outerRadius + "," + outerRadius + ")")    

})


                ;

   var arc = d3.svg.arc()            
            .outerRadius(outerRadius).innerRadius(innerRadius);


   var arcFinal = d3.svg.arc().innerRadius(innerRadiusFinal).outerRadius(outerRadius);
    var arcFinal3 = d3.svg.arc().innerRadius(innerRadiusFinal3).outerRadius(outerRadius);

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

   var arcs = vis.selectAll("g.slice")     
        .data(pie)                        
        .enter()                          
            .append("g")                
               .attr("class", "slice")   
               .on("mouseover", mouseover)
                    .on("mouseout", mouseout)
                    .on("click", up)
                    ;

        arcs.append("path")
               .attr("fill", function(d, i) { return color(i); } ) 
               .attr("d", arc)     
                    .append("title") 
                   .text(function(d) { return d.data.category + ": " + formatAsPercentage(d.data.measure); });          

        d3.selectAll("g.slice").selectAll("path").transition()
                .duration(750)
                .delay(10)
                .attr("d", arcFinal )
                ;


      arcs.filter(function(d) { return d.endAngle - d.startAngle > .2; })
            .append("text")
          .attr("dy", ".35em")
          .attr("text-anchor", "middle")
          .attr("transform", function(d) { return "translate(" + arcFinal.centroid(d) + ")rotate(" + angle(d) + ")"; })

          .text(function(d) { return d.data.category; })
          ;


        function angle(d) {
            var a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;
            return a > 90 ? a - 180 : a;
        }

        vis.append("text")
            .attr("dy", ".35em")
          .attr("text-anchor", "middle")
          .text("Building")
          .attr("class","title")
          ;         



    function mouseover() {
      d3.select(this).select("path").transition()
          .duration(750)

                    .attr("d", arcFinal3)
                    ;
    }

    function mouseout() {
      d3.select(this).select("path").transition()
          .duration(750)

                    .attr("d", arcFinal)
                    ;
    }

    function up(d, i) {


                updateBarChart(d.data.category, color(i));
                updateLineChart(d.data.category, color(i));

    }
}

dsPieChart();

任何人都可以给出正确的解决方案

can any one give a correct solution

谢谢

Vinoth

推荐答案

只需创建具有以下结构的JSON文件:

Just create a JSON file with this structure:

[{
    "category": "ACC",
    "measure": 0.30
}, {
    "category": "B56",
    "measure": 0.25
}, {
    "category": "MAB",
    "measure": 0.15
}]

并使用d3.json:

d3.json("data.json", function(dataset){
    //code here
});

这是一个显示它的小人: https://plnkr.co/edit/OUjPNY3W2aXXCSxvm4tZ? p =预览

Here is a plunker showing it: https://plnkr.co/edit/OUjPNY3W2aXXCSxvm4tZ?p=preview

这篇关于D3仪表板图表数据从json或csv绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆