2014-02-19 2 views
0

JSON 데이터를 사용하여 D3.js로 막 대형 차트를 만들려고합니다. 대부분의 자습서는 tsv 또는 csv 형식을 사용하므로 내 문제에 대해 적절한 답을 찾을 수 없었습니다.D3.js - rangeBands()를 사용할 때 겹침 막대 차트

문제 : d3 function rangeBands (...)를 사용하여 차트 영역 내에 균등 한 간격으로 열을 표시 할 수 없습니다. 대신 그들은 서로의 위에 쌓인 것처럼 보입니다.

나는 다음과 같은 데이터 세트가 있습니다

var jsonData = [ 
    {"Aluno":"Daniel","Presencas":1,"Media":5,"Cadeira":"A"}, 
    {"Aluno":"Daniel","Presencas":2,"Media":4,"Cadeira":"B"}, 
    {"Aluno":"Daniel","Presencas":3,"Media":3,"Cadeira":"C"}, 
    {"Aluno":"Daniel","Presencas":4,"Media":2,"Cadeira":"D"}, 
    {"Aluno":"Daniel","Presencas":5,"Media":1,"Cadeira":"E"}, 
]; 

... 다음 스케일 :

var x = d3.scale.ordinal().rangeRoundBands([0, width], .1); 

var y0 = d3.scale.linear().domain([0, 20]).range([height, 0]), 
y1 = d3.scale.linear().domain([0, 100]).range([height, 0]); 

을 ... 그리고 차트를 다음과 같은 방법으로 채울 :

bars = svg.selectAll(".bar").data(jsonData).enter(); 
x.domain([0, jsonData.length]); 

    bars.append("rect") 
     .attr("class", "bar1") 
     .attr("x", function(d) { 
      return x(d.Cadeira); 
      }) 
     .attr("width", x.rangeBand()/2) 
     .attr("y", function(d) { 
      return y0(d.Presencas); 
      }) 
     .attr("height", function(d,i,j) { 
      return height - y0(d.Presencas); 
      }); 
내가 실현 enter image description here

문제가 내가 각 개인에게 규모를 "x"를 적용하고있어한다는 것을 (또는 적어도 내가 뭘 생각) : 울부 짖는 소리 같이

결과는 중복 된 열이있는 차트입니다 데이터 jsonData의 아이템 (그리고 전체 집합)과 같이 :

.attr("x", function(d) { 
       return x(d.Cadeira); 
       }) 

, 및 따라서 열이 고르게 (a 당시에 때문에 공백 만 1 개 요소) 이격 캔트. 이 올바른지?

어떻게 해결할 수 있습니까?

감사합니다.

[해결]

가 제대로 vraiment의 대답에 "X"덕분에 도메인을 추가하여 문제를 해결.

x.domain(jsonData.map(function(d){return d.Cadeira;})); 
+0

등 뭔가 어디 도메인을 설정할 x 축의 경우 – jmpyle771

+0

도메인 설정이 작동하지 않습니다. 사실 내 질문에 약간의 실수가 있습니다. x : domain ([0, jsonData.length]);와 같이 x에 도메인을 추가하여 테스트 결과 이미지가 표시되기 때문입니다. –

답변

1

아마 xScale 도메인을 초기화하지 않았습니까?

x.domain ([ "A", "B", "C", "D", "E"])

+0

나는 사용을 시도했다 : x.domain ([0, jsonData.length]); 결과는 이미지 –

+0

에 표시됩니다. 기본적으로 Cadeirra는 x 값입니다. 귀하의 json에 따르면, Cadeirra 5 가능한 값을 포함 : A, B, C, D, E. 자, 규모의 영역이 가능한 입력입니다. 귀하의 경우 가능한 입력은 A, B, C, D 및 E입니다. 따라서 [0, jsonData.length]를 수행하면 저울에는 0과 5 만 2 개의 x 값만있을 것으로 예상됩니다. 그러나 우리는 당신이 A, B, C, D, E가되기를 원한다는 것을 알아라. – jmpyle771

+0

어리석은 실수 .... 너는 절대적으로 옳다! 네, 고쳐 주셔서 고마워요. –