2014-02-12 5 views
0

NVD3 멀티 바둑판 식으로 전달할 데이터 세트가 여러 개 있습니다. 문제는 차트가 스택 모드에서 을 올바르게 표시하지 않는 것입니다. 일부 속성이 한 세트에서 누락되었거나 다른 속성에서 누락 된 경우입니다.정규화되지 않은 데이터가있는 NVD3 MultiBarChart 스택 된 디스플레이

의 내가 사용 매주 음료 환경 설정의 목록이 있다고 가정 해 봅시다 : 모든 "사용자가"같은 음료를 가지고 있기 때문에

[ 
    { 
     userName: "Todd", 
     values: [ 
      { 
       x: "Coffee", 
       y: 32 
      }, 
      { 
       x: "Tea", 
       y: 13 
      }, 
      { 
       x: "Beer", 
       y: 2 
      } 
     ] 
    }, 
    { 
     userName: "Allison", 
     values: [ 
      { 
       x: "Coffee", 
       y: 4 
      }, 
      { 
       x: "Milk", 
       y: 2 
      }, 
      { 
       x: "Sprite", 
       y: 14 
      } 
     ] 
    }, 
    { 
     userName: "Vern", 
     values: [ 
      { 
       x: "Water", 
       y: 112 
      }, 
      { 
       x: "Gatorade", 
       y: 13 
      }, 
      { 
       x: "Beer", 
       y: 0 
      } 
     ] 
    } 
] 

, 그래프가 제대로 스택 모드에 표시되지 않습니다를.

각 사용자가 모두 동일한 음료수를 갖도록 데이터를 정규화하면 이전 누락 값이 0이되어 누적 모드가 올바르게 표시됩니다.

모든 "사용자"배열이 동일한 개체 수를 갖도록 프로그래밍 방식으로 데이터를 정규화하는 방법을 찾고 있습니다.

이것은 여기 게시물과 비슷합니다 : in nvd3 multibarchart, some stacks lose their colors or otherwise become invisible 그러나 프로그래밍 방식으로 데이터를 정규화하는 방법을 찾고 있습니다.

답변

1

이 그것을 할 수있는 가장 효율적인 방법이 아니다, 그러나 어떤 라이브러리를 사용하지 않는 데이터의 너무 많은 양을 위해 잘 작동합니다 :

var drinks = []; 
data.forEach(function(d) { 
    d.values.forEach(function(e) { 
    if(drinks.indexOf(e.x) == -1) drinks.push(e.x);; 
    }); 
}); 

data.forEach(function(d) { 
    drinks.forEach(function(drink) { 
    var have = false; 
    d.values.forEach(function(e) { 
     if(e.x == drink) have = true; 
    }); 
    if(!have) d.values.push({x: drink, y: 0}); 
    }); 
}); 

전체 데모 here합니다.

관련 문제