DC.JS를 사용하여 누적 막 대형 차트를 만들고 싶습니다.dc.js를 사용하여 누적 막 대형 차트를 만드는 방법은 무엇입니까?
나는 아무 소용 dc.js를 (graph, source code)에서 문서를 활용하는 시도했습니다 - 아래는 내 시도 (here is my attempt in jsfiddle)와 CodePen 내 가장 최근의 시도이다.
'이름'을 X 축, '유형'을 스택으로 사용하고 싶습니다.
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
<script src="https://rawgithub.com/NickQiZhu/dc.js/master/web/js/crossfilter.js"></script>
<script src="https://cdnjs.site44.com/dc2.js"></script>
<div id="chart"></div>
자바 스크립트
var data = [ {"Name":"Abby","Type":"Apple"}, {"Name":"Abby","Type":"Banana"}, {"Name":"Bob","Type":"Apple"} ]
data.forEach(function(x) {
x.Speed = +x.Type;
});
var ndx = crossfilter(data)
var xdim = ndx.dimension(function (d) {return d.Name;});
function root_function(dim,stack_name) {
return dim.group().reduce(
function(p, v) {
p[v[stack_name]] = (p[v[stack_name]] || 0) + v.Speed;
return p;},
function(p, v) {
p[v[stack_name]] = (p[v[stack_name]] || 0) - v.Speed;
return p;},
function() {
return {};
});}
var ydim = root_function(xdim,'Type')
function sel_stack(i) {
return function(d) {
return d.value[i];
};}
var chart = dc.barChart("#chart");
chart
.x(d3.scale.ordinal().domain(xdim))
.dimension(xdim)
.group(ydim, "1", sel_stack('1'))
.xUnits(dc.units.ordinal);
for(var i = 2; i<6; ++i)
chart.stack(ydim, ''+i, sel_stack(i));
chart.render();
나는 약간의 시간이 바이올린을 켜는 봤는데 내가 몇 가지 추가 연구 결과가 있습니다
내가 데이터 배열을 대체 다음과 같이 작동합니다.
data = [{ "이름": "Abby", "유형": "1"}, { "이름": "Abby", "유형": "2"}, { "이름" "유형": "1"}]
하지만 (https://github.com/dc-js/dc.js/blob/develop/web/js/dc.js)
그러나 직류 2.1.0-DEV와 (https://cdnjs.cloudflare.com/ajax/libs/dc/1.7.5/dc.min.js) 직류 1.7.5 스왑 때 데이터를 교체 할 때 만 작동 배열은 다음과 같이 작동하지 않습니다 :
데이터 = [{ "이름": "Abby", "유형": "3"}, { "이름": "Abby", "유형": "4 "}, {"Name ":"Bob ","Type ":"2 "}]
루트 문제가 root_function에 있다고 생각합니다.
귀하의 그룹 축소 기가 올바른 구조를 가지고 있지 않습니다. 예제에서'group.reduce' 호출을 살펴보십시오. –
에단이 말한 것. 특히, Expt 대신에'Type'을 거의 사용하고 for-loop에서 정수 대신에'Type' 값을 반복 할 수있는 것처럼 보입니다. 그래도 문제가 해결되지 않으면 질문을 수정하고 (의견을 Ping하여 알려주십시오) – Gordon
@Gordon - 여기에 귀하의 조언을 따라 내 질문을 편집했습니다. 여전히 효과가없는 것 같습니다. 다른 아이디어? – Chris