image

後端資料處裡請參考 [ASP.NET C#] 022 | 使用d3.js建立一般資料表 table

image

▲原始資料

 

1. 把資料群組化

  var dataGroup = d3.nest()
                .key(function (d) { return d.yField; })
                .rollup(f => d3.sum(f, function (g) { return g.count; }))
                .entries(data)  //使用object排序上有問題
                .sort((a, b) => d3.descending(a.value, b.value));

image

▲object {key:value}

image

▲entries [{key: data,vlaue:data},{}]

 

2. 取得項目名稱

var rowHeaders = d3.map(dataGroup, d => { return d.key; }).keys();

//legend.data:['AS', 'CASE']

 

3. 資料格式化

var seriesData= [];
$.each(dataGroup, function (i, d) {  //key value
                            var obj = {name:d.key,value:d.value};
                            seriesData.push(obj);
            });

//series.data:[{value:10,name:'AS'}, {value:5,name:'CASE'}]

 

4. 設定

option = {
                title: {
                    text: 'Defect分布',
                    subtext: 'subtext',
                    left: '30%'
                },
                tooltip: {
                    trigger: 'item',
                    formatter: '{a} <br/>{b} : {c} ({d}%)'
                },
                legend: {
                    type: 'scroll',
                    orient: 'vertical',
                    right: 20,
                    top: 20,
                    bottom: 20,
                    data: rowHeaders
                },
                series: [
                    {
                        name: 'Defect分布',
                        type: 'pie',
                        radius: '55%',
                        center: ['40%', '60%'],
                        data: seriesData,
                            //[{name: 'ND',value: 335}],
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            };

 

 使用dataset產生多圖檔 

image

1. 生成二維資料表

var data = dataset.data;
            var xFieldName = dataset.xFieldName;
            var yFieldName = dataset.yFieldName;

            var dataGroup = d3.nest()
                     .key(function (d) { return d.yField; })
                     .rollup(function(f) { return {
                         total: d3.sum(f, function (d) { return d.count; }),
                         lists: f
                     };})
                .entries(data);

            var columnHeaders = d3.map(data, (d) => { return d.xField; }).keys();
            var rowHeaders = d3.map(dataGroup, (d) => { return d.key; }).keys();

           var datasetSorce= [];
            datasetSorce.push(([yFieldName].concat(columnHeaders)));
            $.each(dataGroup, function (i, d) {
                var s = [];
                 s[0]=d.key;
                columnHeaders.forEach((f,i) => s[i+1] =0);
                d.value.lists.forEach(g => { s[columnHeaders.indexOf(g.xField) + 1] = g.count;})
                datasetSorce.push(s);
            });

image

 

 

Chart label樣式設定

series.label

label: {
           normal: {
                          formatter:'{b}\n{d}%'
          }
}

image

 

{a}:系列名
{b}:數據名
{c}:數據值
{d}:百分比

{@FACTORY_A}: 如索引 FACTORY_A 數據值

arrow
arrow
    全站熱搜

    門外漢 發表在 痞客邦 留言(0) 人氣()