gpt4 book ai didi

javascript - dc.js - 如何将 .cap() 与 .valueAccessor() 一起使用?

转载 作者:行者123 更新时间:2023-11-28 00:07:06 25 4
gpt4 key购买 nike

使用 dc.js 库绘制图表,我需要使用 .valueAccessor() 在饼图中使用 .cap() 方法。

相同的图表:

  • 没有 .cap() :它在 .valueAccessor() 上的绘制顺序完全正确
  • 使用 .cap() :在 js 控制台中绘制图表没有错误,但它没有显示正确的结果,看起来它是按值排序而不是按 valueAccessor 排序。

这是一个更好解释的例子:

var chartProblems = dc.pieChart('#chart');
var chartProblems1 = dc.pieChart('#chart1');



var data = [{
Ticket: 0,
Problem: 'zzz'
}, {
Ticket: 1,
Problem: 'zzz'
}, {
Ticket: 1,
Problem: 'bb'
}, {
Ticket: 1,
Problem: 'cc'
}, {
Ticket: 2,
Problem: 'zzz'
}, {
Ticket: 3,
Problem: 'bb'
}, {
Ticket: 3,
Problem: 'zzz'
}, {
Ticket: 4,
Problem: 'zzz'
}, {
Ticket: 5,
Problem: 'zzz'
}, {
Ticket: 6,
Problem: 'zzz'
}, {
Ticket: 6,
Problem: 'bb'
}, {
Ticket: 7,
Problem: 'bb'
}, {
Ticket: 8,
Problem: 'dd'
}, {
Ticket: 9,
Problem: 'ee'
}, {
Ticket: 9,
Problem: 'ff'
}, {
Ticket: 10,
Problem: 'cc'
}, ];

var ndx = crossfilter(data);
ProblemsDimension = ndx.dimension(function(b) {
return b.Problem
});
ProblemGroup = ProblemsDimension.group()
.reduce(
function(p, d) {

if (d.Ticket in p.Ticket) p.Ticket[d.Ticket] ++;
else {
p.Ticket[d.Ticket] = 1;
p.TicketCount++;
}
return p;
},

function(p, d) {
p.Ticket[d.Ticket] --;
if (p.Ticket[d.Ticket] === 0) {
delete p.Ticket[d.Ticket];
p.TicketCount--;
}
return p;
},

function() {
return {
TicketCount: 0,
Ticket: {}
};
}
);


chartProblems
.width(300)
.height(300)
//.margins({ top: 20, left: 10, right: 10, bottom: 20 })
.dimension(ProblemsDimension)

.group(ProblemGroup)

.colors(d3.scale.category20())
// assign colors to each value in the x scale domain
//.ordinalColors(['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#dadaeb'])
.label(function(d) {
return d.key + ': ' + d.value.TicketCount;
})
// title sets the row text
.title(function(d) {
return d.key + ': ' + d.value.TicketCount;
})

//.elasticX(true)
//.xAxis().ticks(4)
;
chartProblems
.valueAccessor(function(d) {
return d.value.TicketCount;
})
.ordering(function(b) {
return -b.value.TicketCount
})
.cap(2);
chartProblems.render();

chartProblems1
.width(300)
.height(300)
//.margins({ top: 20, left: 10, right: 10, bottom: 20 })
.dimension(ProblemsDimension)

.group(ProblemGroup)

.colors(d3.scale.category20())
// assign colors to each value in the x scale domain
//.ordinalColors(['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#dadaeb'])
.label(function(d) {
return d.key + ': ' + d.value.TicketCount;
})
// title sets the row text
.title(function(d) {
return d.key + ': ' + d.value.TicketCount;
})

//.elasticX(true)
//.xAxis().ticks(4)
;
chartProblems1
.valueAccessor(function(d) {
return d.value.TicketCount;
})
.ordering(function(b) {
return -b.value.TicketCount
})
//.cap(2)
;
chartProblems1.render();
<script src="http://tvinci.github.io/webs/js/d3.js"></script>
<link href="http://cdnjs.cloudflare.com/ajax/libs/dc/1.7.0/dc.css" rel="stylesheet" />
<script src="http://tvinci.github.io/webs/js/crossfilter.js"></script>
<script src="https://dc-js.github.io/dc.js/js/dc.js"></script>

<body>
<table>
<tr>
<td>With cap
<br/>
<div id="chart"></div>
</td>
<td>Same chart without cap
<br/>
<div id="chart1"></div>
</td>
</tr>
</table>
</body>

也在这里:http://jsfiddle.net/atagliavini/LypsLtot/

我该如何解决这个问题?我是不是忘记了什么?

最佳答案

我知道有点晚了,但这是我解决问题的方法。我创建了图表的自定义 othersGroupercappedValueAccessor 函数。下面是相同的代码.

chartProblems.othersGrouper(function (topItems, restItems) {
var restItemsSum = d3.sum(restItems, chartProblems.valueAccessor()),
restKeys = restItems.map(chartProblems.keyAccessor());
if (restItemsSum > 0) {
topItems = topItems.concat([{
others: restKeys,
key: chartProblems.othersLabel(),
// value:restItemsSum,
value: {
TicketCount: restItemsSum

}
}]);
}
return topItems;
});
chartProblems.cappedValueAccessor = function (d, i) {
if (d.others) {
return d.value.TicketCount;
}
return chartProblems.valueAccessor()(d, i);
};

由于您已减少组以返回自定义对象,因此您必须修改 othergrouper 和 cappedvalueAccessor 函数才能使用饼图的 cap 功能。 Here是上面使用的 fiddle 的更新链接。

关于javascript - dc.js - 如何将 .cap() 与 .valueAccessor() 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31240433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com