2014-02-12 1 views
0

최신 ARC 도표 1과 - http://jsfiddle.net/NYEaX/699/ ***아크 차트 - 다양한 세그먼트 들여 쓰기/높이

나는 아크 차트의 세트를 개발하고 있어요.

http://jsfiddle.net/NYEaX/90/

는 ^이 내가 가지고있는 최신 버전입니다.

내 첫 번째 문제 - 새로운 데이터 집합이 들어 오면 애니메이션이 깜박 거리는 것입니다.

또한 세그먼트 당 내경/외경을 변경하는 데 관심이 있습니다.

난 그냥 다음 코드 나 응용 프로그램을 수정 한

getArc: function(){ 
      var that = this; 

      var arc = d3.svg.arc() 
        .innerRadius(function(d, i){ 
         return that.radius; 
        }) 
        .outerRadius(function(d){ 
         var maxHeight = 100; 
         var ratio = (d.height/maxHeight * 100)+that.radius; 
         return ratio; 
        }) 
        .startAngle(function(d, i){ 
         return d.startAngle; 
        }) 
        .endAngle(function(d, i){ 
         return d.endAngle; 
        }); 

      return arc; 
     } 

의 i에서 계수를 제공한다.

이제 다양한 세그먼트에서 교대조를 만들었습니다.

http://jsfiddle.net/NYEaX/91/

The attempt I am trying to make

그러나, 지금은 자신의 길이를 변경하는 세그먼트의 값을 사용하려합니다. 그래서 저는 그림 예제와 같은 호를 만들고 싶습니다.

이것은 내가 가진 최신 사례입니다. 여기

http://jsfiddle.net/NYEaX/92/

는 코드입니다 - 나는 해결책을 완료 startAngle로부터/endAngle를 통해 정확한 길이를 제공하기 위해 호 모두의 전체 길이를 얻는 방법을 확실입니다.

setData: function(data, isSorted){ 

      var diameter = 2 * Math.PI * this.radius; 

      var localData = new Array(); 

      var displacement = 0; 
      var oldBatchLength = 0; 


      var totalSum = 0; 
      $.each(data, function(index, value) { 
       $.each(value.segments, function(ri, va) { 
        totalSum+= va.height; 
       }); 
      }); 


      $.each(data, function(index, value) {    
       var riseLevels = value.segments; 
       //var riseLevelCount = riseLevels.length; 

       //var arcBatchLength = 2*Math.PI; 
       //var arcPartition = arcBatchLength/riseLevelCount; 

        $.each(riseLevels, function(ri, value) { 

         if(oldBatchLength !=undefined){    
          displacement+=oldBatchLength; 
         } 

         var segmentValue = value.height; 

         //var ratio = value.height/totalSum; 

         var arcBatchLength = segmentValue;//ratio*2*Math.PI; 
         var arcPartition = arcBatchLength/totalSum;      


         var startAngle = (ri*arcPartition); 
         var endAngle = ((ri+1)*arcPartition); 

         if(index!=0){ 
          startAngle+=displacement; 
          endAngle+=displacement; 
         } 

         riseLevels[ri]["startAngle"] = startAngle; 
         riseLevels[ri]["endAngle"] = endAngle; 
         riseLevels[ri]["index"] = ri; 



         oldBatchLength = arcBatchLength; 
        }); 
         //oldBatchLength = arcBatchLength;  

       localData.push(riseLevels); 
      }); 

      var finalArray = new Array(); 

      $.each(localData, function(index, value) { 
       $.each(localData[index], function(i, v) { 
        finalArray.push(v); 
       }); 
      }); 

      console.log("finalArray", finalArray); 

      return finalArray; 

     } 
+1

깜박임은 "바운스"트윈 때문입니다. 그리고 이미 세그먼트별로 바깥 쪽 반지름을 변경하고있는 것 같습니다. –

+0

@ Old Country. 귀하의 질문에 대한 더 많은 정보를 제공하는 답변을 작성하지 마십시오. 대신 질문을 수정하십시오 (편집 페이지 링크는 질문 하단에 있음). 사람들이 활동 목록에서 3 개의 답을 가진 질문을 볼 때 더 이상주의를 기울일 필요가 없다고 생각합니다. – AmeliaBR

+0

나는 이것에 대한 cinemetric 기반의 애니메이션 차트 버전을 추가했습니다 - http://jsfiddle.net/NYEaX/137/ –

답변

0

나는 그 값과 관련하여 호 길이를 수정하는 것에 더 가깝다. 그러나 호의 변위가 올바르지 않습니다. 더 많은 데이터가 회색 호에 노출되면

http://jsfiddle.net/NYEaX/100/

-이 나옵니다. 녹색/노란색/녹색 호로 전환하면 비슷합니다.

나는 문제를 식별하고 시도하기 위해 응용 프로그램을 더욱 단순화하려고 노력했습니다.

$.each(data[0].segments, function(ri, value) { 
       //console.log("ri", ri); 

       if(oldBatchLength !=undefined){    
        displacement+=oldBatchLength; 
       } 

       var segmentValue = value.value; 

       var fraction = segmentValue/segmentValueSum; 

       var arcBatchLength = fraction*2*Math.PI; 
       var arcPartition = arcBatchLength;  

       //console.log("arcBatchLength", arcBatchLength); 
       //console.log("oldBatchLength", oldBatchLength); 
       //console.log("displacement", displacement); 

       var startAngle = (ri*arcPartition); 
       var endAngle = ((ri+1)*arcPartition); 

       if(ri!=0){ 
        displacement-=arcBatchLength;//not sure its right 

        startAngle+=displacement; 
        endAngle+=displacement; 
       } 

       data[0].segments[ri]["startAngle"] = startAngle; 
       data[0].segments[ri]["endAngle"] = endAngle; 
       data[0].segments[ri]["index"] = ri; 

       oldBatchLength = arcBatchLength; 
      }); 
+0

나는 호 길이가 서로 비례해서 정확하게 나오지 만 호의 변위는 여전히 다릅니다 권리. http://jsfiddle.net/NYEaX/104/ –

+0

나는 위치 변경을 올바르게 처리 할 수있었습니다.전체 둘레를 차지하는 것과 달리 데이터를 나타낼 수있는 1/4의 호를 그리기 위해 차트를 접을 수 있는지 궁금합니다. http://jsfiddle.net/NYEaX/109/ –

+0

데이터가 원의 1/3로 표시되는 버전을 관리하므로 타임 차트 (http : // jsfiddle)에 대해 바이너리 데이터로 작동 할 수 있습니다. net/NYEaX/110 / –