我使用javascript制作html信息中心。我在显示饼图时遇到问题。我希望使用表格来增加长度'数据集用于填充饼图。添加长度数据具有以下json格式。
[{"添加长度":30.0,"未来一周":59.16,"上周":0.0," 2017年第一季度" :0.0," 2017年第3季度":0.0," 2017年第1季度总计":83.68," 2017年第3季度总计":83.21,"目标": 0.0,"自然交付等同于":0.0},{"添加长度":60.0,"未来一周":40.84,"上周&# 34;:100.0," 2017年第1季度":0.0," 2017年第3季度":0.0," 2017年第1季度总计":0.0," 2017年第3季度总计&# 34;:0.0,"目标":0.0,"自然交付等同于":0.0}]
通过在线阅读,这应该有效。这应该是由添加长度表填充的饼图,其中包含" Week Ahead"柱。我正在使用的javascript位如下所示。
queue()
.defer(d3.json, "/txtimes1")
.defer(d3.json, "/txtimes2")
.defer(d3.json, "/txtimes3")
.defer(d3.json, "/txtimes4")
.defer(d3.json, "/txtimes5")
.await(makeGraphs);
function makeGraphs(error,txtimes1,txtimes2,txtimes3,txtimes4,txtimes5) {
var addl = txtimes1;
var channel = txtimes2;
var sale = txtimes3;
var daypart = txtimes4;
var day = txtimes5;
//Create a Crossfilter instance
//var ndx1 = crossfilter(prog);
var ndx1 = crossfilter(addl);
var ndx2 = crossfilter(channel);
var ndx3 = crossfilter(sale);
var ndx4 = crossfilter(daypart);
var ndx5 = crossfilter(day);
var AddlDim = ndx1.dimension(function (d) {
return d["Week Ahead"];
});
var sentimentName = ndx1.dimension(function (d) {
return d["Week Ahead"];
});
var sentimentGroup = sentimentName.group(function (d) {
return d["Add Length"];
});
var sentimentPie = dc.pieChart("#sentiment-pie");
var addlength = dc.dataTable("#addl");
var pspace ="\xa0\u0025\xa0\xa0\xa0";
var space ="\xa0\xa0\xa0\xa0";
var colour1="red";
var colour2="orange";
var colour3="FEE11";
var colour4="green";
var colour5="blue";
var colour6="purple";
var colour7="darkred";
var colour8="pink";
sentimentPie
.width(415)
.height(415)
.radius(200)
.innerRadius(50)
.dimension(sentimentName)
.group(sentimentGroup)
.render()
.label(function (d) {
if (sentimentPie.hasFilter() && !sentimentPie.hasFilter(d["Week Ahead"])) {
return d["Week Ahead"] + '(0%)';
}
var label = d.key;
label += ' (' + d.key + '%)';
return label;
});
addlength
.dimension(AddlDim)
.group( function (d) { return ''; })
.sortBy( function(d) { return d["Week Ahead"]; })
.columns([{
label: "Add Length " + space,
format: function (d) { return d["Add Length"]+space; }
},
{
label: " Week Ahead " + space,
format: function (d) { return (d["Week Ahead"] + pspace).fontcolor(colour1); }
},
{
label: "Last Week " + space,
format: function (d) { return (d["Last Week"] + pspace).fontcolor(colour2); }
},
{
label: "Q1 2017 " + space,
format: function (d) { return (d["Q1 2017"] + pspace).fontcolor(colour3); }
},
{
label: "Q3 2017 " + space,
format: function (d) { return (d["Q3 2017"] + pspace).fontcolor(colour4); }
},
{
label: "Q1 2017 Total " + space,
format: function (d) { return (d["Q1 2017 Total"] + pspace).fontcolor(colour5); }
},
{
label: "Q3 2017 Total " + space,
format: function (d) { return (d["Q3 2017 Total"] + pspace).fontcolor(colour6); }
},
{
label: "Target " + space,
format: function (d) { return (d["Target"] + pspace).fontcolor(colour7); }
},
{
label: "Natural Delivery Equiv " + space,
format: function (d) { return (d["Natural Delivery Equiv %"] + pspace).fontcolor(colour8); }
}
])
.size(180)
.beginSlice(0)
.endSlice(10)
.order(d3.descending);
如果有人能告诉我为什么这不起作用,我将非常感激。
由于
答案 0 :(得分:1)
我解决了这个问题:
为了填充饼图,需要reduceSum。
var AddlGroup = AddlName.group().reduceSum(function (d) {return d["Week Ahead"];
});
这会将该组中的值相加。但是,由于每个组都有一个条目,因此它返回每行的单行值。