2013-09-05 4 views
3

d3.js를 처음 사용하고 x 축을 따라 각 눈금에 양수 값과 음수 값이있는 누적 막 대형 차트를 만들려고했지만 보이지 않습니다. 그것에 대해 어떻게 움직이는 지 알아 내려고합니다. http://bl.ocks.org/mbostock/1134768에서 예제를 수정하려고 시도했지만 아무 소용이 없습니다.d3.js 양수 값과 음수 값을 가진 스택 막대 차트

+0

당신의 도메인을 설정 https://github.com/hoonzis/KoExtensions/blob/master/charting.js

건배 : 나는 당신이 직접 여기 d3barChart 방법을 확인할 수 있습니다 https://github.com/hoonzis/KoExtensions 내 KoExtensions 프로젝트에 누적 막대 그래프를 추가 한

state.selectAll("rect") .data(function (d) { return d.values; }) .enter().append("rect") .attr("width", x.rangeBand()) .attr("y", function (d) { return y(d.y1); }) .attr("height", function (d) { return y(d.y0) - y(d.y1); }) .style("fill", function (d) { return color(d.name); }); 

: 그런 다음 데이터는이 방법을 그려 (이 경우) 선형 스케일. 실제 사례 없이는 더 많은 것을 도울 수 없습니다. 최소한 여기를 지적 해 줄 수 있습니다. https://github.com/mbostock/d3/wiki/Quantitative-Scales#wiki-linear_domain – Marc

+1

모든 요소에 두 가지 값 (양수 및 음수)을 시각화해야하는 경우 이 http://jsfiddle.net/cuckovic/hwDt3/ 또는 모든 요소가 양수 또는 음수 값만 가져야하는 경우 음수 값을 필터링하여 왼쪽에서 오른쪽으로 양수를 유지할 수 있습니다. – cuckovic

+0

@cuckovic는 바이올린에 대해 감사합니다. 그것은 내가 필요한 것입니다! – Hamatti

답변

3

동일한 문제가있었습니다. 결국 나는 다음 해결책을 가지고왔다 :

data.forEach(function (d) { 
    var newD = {x: d[xcoord]}; 
    var y0neg = 0; 
    var y0pos = 0; 
    newD.values = color.domain().map(function (m) { 
     if (d[m] > 0) 
      return { name: m, y0: y0pos, y1: y0pos += +d[m] }; 
     else { 
      var y1 = y0neg; 
      return { name: m, y0: y0neg += d[m], y1: y1 }; 
     } 
    }); 
    newD.totalPositive = d3.max(newD.values, function (v) { return v.y1}); 
    newD.totalNegative = d3.min(newD.values, function (v) { return v.y0 }); 
    arranged.push(newD); 
}); 

이것은 데이터를 정렬하는 방법이다. 변수 x가 주어진 x 좌표에 대한 각 항목의 값을 보유하고 있다고 가정합니다. 항목의

{ 
    'xcoord':'january', 
    'gains': 100, 
    'otherGains':20, 
    'loses': -50 
} 

이름은 쇼로 도메인에 매핑 할 필요가 다음 각 달 동안 우리가 데이터를 집계해야한다 : 데이터 수집과 같은 값의 목록입니다. 해당 달의 각 항목에 대해 y0 및 y1 좌표가 있습니다. 올바른 y0와 y1 좌표를 갖기 위해서는 음수와 양수 값에 대한 별도의 카운터가 있어야합니다.

관련 문제