2014-07-14 3 views
3

ccs에서 여러 열의 입력을 사용하여 dc.js에 행 차트를 만들어야합니다. 그래서 각 행에 열을 매핑하고 각 열의 총 개수를 행 값에 매핑해야합니다. 이 문제에 대한 분명한 해결책이있을 수 있지만 모든 예제를 찾는 것 같습니다. 많은 감사 Sdc.js - 여러 열에서 행 차트를 만드는 방법

업데이트 : 다음은 간단한 스케치입니다. 표준에 대한 사과
행 차트;
column1 ----------------- 64 (1 열 합계)
열 2 ------- 35 (2 열 합계)
column3 --- --------- 45 (3 열 합계)

+0

당신의 구조를 변경할 수 있습니다 데이터?{금액 : 1, 카테고리 : '비용'}, {금액 : 2, 카테고리 : '수익'}, {금액 : 3, category : 'overhead'}]; 이 변경을 수행하면 범주 차원 및 reduceSum 그룹과 함께 표준 행 표를 사용할 수 있습니다. –

+0

나는 원래 이것을 시도했지만 여러 교차 필터에 걸쳐 혼란스러운 호출 업데이트를 얻었으므로이 패턴 (4 회까지)을 따르는 꽤 다른 몇 개의 행 표가 있습니다. 필자는 이미 하나의 행에 월간 버전이 있고 그 둘레에 unqiue ID를 통해 데이터를 업데이트하는 두 가지 구조의 데이터가 있습니다. 나는 그것을 받아 들일 수 없다는 것을 쉽게 알 수없는 해결책을 가지고있다. – user3836998

+0

나는 당신의 옵션이 1) 복합 차트, 2) 스택 차트, 3) 데이터 구조 변경이라고 생각한다. 복합 차트는 가장 적합하게 들립니다. "열"차트를 작성하고 나면 복합 차트를 사용하여 차트를 하나의 차트로 결합 할 수 있습니다. 그러나 차트를 결합 할 때 행이 서로 겹치지 않도록 행 갭과 오프셋을 수동으로 관리해야 할 수 있습니다. –

답변

1

누적 행렬 차트를 찾으십니까? 예를 들어,이 차트는 각 행의 카테고리를 나타내는 가지며 각 색상 서브 카테고리 나타냄

enter image description here

불행히도,이 기능은 아직 DC.js.에서 지원되지 않습니다 기능 요청은 https://github.com/dc-js/dc.js/issues/397입니다. 라이브러리가 아닌 코드를 사용하고자한다면 해당 문제 로그에서 참조 된 예제를 확인할 수 있습니다.

또는 스택 가능 막대 차트를 사용할 수 있습니다. 이 링크는 어떻게 작동하는지 잘 설명하는 것 같습니다 : http://www.solinea.com/blog/coloring-dcjs-stacked-bar-charts enter image description here

+0

빠른 답장을 보내 주셔서 감사합니다하지만 인스턴트 메신저를 두려워하지 마세요. 난 정말 하나의 행에 하나의 열을 가져 와서 이것을 5 개의 열에 대해 살펴보고 있습니다. 그래서 그것은 여러 컬럼에 차원을 설정하는 것과 같습니다. 나는 그것을 만들기 위해 아마 해킹 할 수있을 거라 생각했지만 어디서부터 시작해야할지 모르겠다. 아마 각 열에 대해 5 개의 별도의 행 표를 작성하고 각각의 표를 서로 겹쳐서 하나의 도표처럼 보이게 할 수는 있지만 최대 규모를 관리해야합니다. – user3836998

+0

필요한 것을 시각화하는 데 문제가 있습니다. 예제 또는 모형 이미지를 제공 할 수 있습니까? –

+0

아마도 복합 차트를 찾고 있습니까? http://stackoverflow.com/questions/21961551/multi-series-bar-chart-in-dc-js –

4

흥미로운 문제! 피벗과 다소 비슷하게 들리는데, requested for crossfilter here.

  • 당신은 클릭 할 수 없습니다, 다른 차원
  • 에 필터를 반영하지만 것 : 해결책은 그러나주의의 몇 가지가있다 "가짜 그룹"과 "가짜 차원"을 사용하여 마음에 온다 (무엇을 기록하는 것은 그것이 선택 때문에?) 순서로 차트의 행은 무엇을 필터링하는

가짜 그룹 생성자는 다음과 같습니다

function regroup(dim, cols) { 
    var _groupAll = dim.groupAll().reduce(
     function(p, v) { // add 
      cols.forEach(function(c) { 
       p[c] += v[c]; 
      }); 
      return p; 
     }, 
     function(p, v) { // remove 
      cols.forEach(function(c) { 
       p[c] -= v[c]; 
      }); 
      return p; 
     }, 
     function() { // init 
      var p = {}; 
      cols.forEach(function(c) { 
       p[c] = 0; 
      }); 
      return p; 
     }); 
    return { 
     all: function() { 
      // or _.pairs, anything to turn the object into an array 
      return d3.map(_groupAll.value()).entries(); 
     } 
    }; 
} 

무엇을 원하는 모든 행을 객체로 축소 한 다음 객체를 배열 형식으로 변환하는 중입니다. dc.js는 이 반환 될 것으로 예상합니다.

이 생성자에 임의의 차원을 전달할 수 있습니다. 이러한 행을 필터링 할 수 없기 때문에 색인이 생성되는 것은 중요하지 않지만 모든 차원에 영향을 미치기 때문에 자체 차원을 갖고 싶어합니다. 다른 차원 필터. 또한이 생성자에 그룹으로 변환하려는 열의 배열을 지정하고 그 결과를 "그룹"으로 사용하십시오.

예.

var dim = ndx.dimension(function(r) { return r.a; }); 
var sidewaysGroup = regroup(dim, ['a', 'b', 'c', 'd']); 
여기

전체 예 : http://jsfiddle.net/gordonwoodhull/37uET/6/

(? 불량의 차트 결과의 행을 클릭 어떻게 필터링하도록되어 무엇 때문에주의)

+0

더 좋은 이름은'regroup'보다는'rotate'입니다 – Gordon

+0

이것은 나를 위해 완벽하게 작동했습니다. 고맙습니다! 필터링을 막기 위해 다른 사람이 게시 한 솔루션을 발견했습니다. 귀하의 코드를 위해서는 sidewaysRow.filter = function() {}을 추가해야합니다. 이것은 필터 "badness"를 막을 것입니다 – canyon289

+0

안녕하세요 고든,이 함수에서 평균을 계산해야합니다. 저는 평소에 평가사 (assessor)에서 이것을합니다.이 경우 어떻게합니까? 많은 분들께 감사드립니다. – Simon