2012-11-02 7 views
18

nvd3을 사용하여 세로 누적 막 대형 차트를 만들려고합니다. 나는 website에서 예제처럼 무작위로 생성 된 값과는 달리 이산 데이터 값을 사용할 것입니다.nvd3 누적 값이있는 스택 막 대형 차트

나는 Group/Stacked Bar Chart의 라이브 코드 예제를 가지고 놀고 내 자신의 값을 포함하는 JSON 데이터를 넣으려고했다. 제가 시도한 것은 수평 막대 차트에서 JSON 데이터를 가져 와서 수직 막대 차트의 데이터로 넣는 것입니다.

이 내가 그룹/스택 막 대형 차트의 데이터 대신 라이브 코드 예제에 사용되는 데이터는 다음과 같습니다 나는 데이터에 대한 자바 스크립트의 데이터()에 함수 호출을 대체

[ 
    { 
    "key": "Series1", 
    "color": "#d62728", 
    "values": [ 
     { 
     "label" : "Group A" , 
     "value" : -1.8746444827653 
     } , 
     { 
     "label" : "Group B" , 
     "value" : -8.0961543492239 
     } , 
     { 
     "label" : "Group C" , 
     "value" : -0.57072943117674 
     } , 
     { 
     "label" : "Group D" , 
     "value" : -2.4174010336624 
     } , 
     { 
     "label" : "Group E" , 
     "value" : -0.72009071426284 
     } , 
     { 
     "label" : "Group F" , 
     "value" : -0.77154485523777 
     } , 
     { 
     "label" : "Group G" , 
     "value" : -0.90152097798131 
     } , 
     { 
     "label" : "Group H" , 
     "value" : -0.91445417330854 
     } , 
     { 
     "label" : "Group I" , 
     "value" : -0.055746319141851 
     } 
    ] 
    }, 
    { 
    "key": "Series2", 
    "color": "#1f77b4", 
    "values": [ 
     { 
     "label" : "Group A" , 
     "value" : 25.307646510375 
     } , 
     { 
     "label" : "Group B" , 
     "value" : 16.756779544553 
     } , 
     { 
     "label" : "Group C" , 
     "value" : 18.451534877007 
     } , 
     { 
     "label" : "Group D" , 
     "value" : 8.6142352811805 
     } , 
     { 
     "label" : "Group E" , 
     "value" : 7.8082472075876 
     } , 
     { 
     "label" : "Group F" , 
     "value" : 5.259101026956 
     } , 
     { 
     "label" : "Group G" , 
     "value" : 0.30947953487127 
     } , 
     { 
     "label" : "Group H" , 
     "value" : 0 
     } , 
     { 
     "label" : "Group I" , 
     "value" : 0 
     } 
    ] 
    } 
] 

:

nv.addGraph(function() { 
    var chart = nv.models.multiBarChart(); 

    chart.xAxis 
     .tickFormat(d3.format(',f')); 

    chart.yAxis 
     .tickFormat(d3.format(',.1f')); 

    d3.select('#chart svg') 
     .datum(data) 
     .transition().duration(500).call(chart); 

    nv.utils.windowResize(chart.update); 

    return chart; 
}); 

그래프에 내 시리즈에 올바르게 레이블이 지정되지만 막대는 표시되지 않습니다. 이 그래프가이 유형의 데이터를 사용할 수 없습니까? 내 데이터가 가로 막대로 작업 할 수 있지만 가능한 경우 세로 막대를 사용하고 싶습니다.

+0

어떻게 어떤 시리즈를 사용하는 "알"는 무엇입니까? –

+0

안녕하세요 @rkseth 바이블에서 작업 코드를 제공해 주실 수 있습니까? –

답변

40

그룹/누적 막대 그래프합니다 (multiBarChart 모델) y는 바의 높이와 x 라벨이며 어떤 숫자 또는 텍스트 일 ​​수있다 xy 특성과 함께 사용된다.

불행히도 정확한 데이터 형식에 대한 많은 문서가 없으며 데이터를 생성하는 데 혼란스러운 기능을 사용하는 모든 예제가 있습니다.

var chart = nv.models.multiBarChart(); 
 
d3.select('#chart svg').datum([ 
 
    { 
 
    key: "S1", 
 
    color: "#51A351", 
 
    values: 
 
    [  
 
     { x : "A", y : 40 }, 
 
     { x : "B", y : 30 }, 
 
     { x : 5, y : 20 } 
 
    ] 
 
    }, 
 
    { 
 
    key: "S2", 
 
    color: "#BD362F", 
 
    values: 
 
    [  
 
     { x : "A", y : 60 }, 
 
     { x : "B", y : 50 }, 
 
     { x : 5, y : 70 } 
 
    ] 
 
    } 
 
]).transition().duration(500).call(chart);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.1/nv.d3.min.js"></script> 
 
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.1/nv.d3.min.css"> 
 

 
<div id="chart" style="height: 200px;"><svg></svg></div>
이제 여러분의 코드에 두 가지 문제가 있습니다

group/stacked bar chart


:

  1. 그래서 여기에 내가 혼합 숫자와 텍스트 라벨을 사용하여 작업있어 예입니다

    을 제거해야합니다. 텍스트 레이블을 지정할 축에 대해.
    tickFormat 함수는 축 레이블의 숫자 형식을 설정합니다. 귀하의 경우 레이블이 숫자로 변환되어 NaN이 될 경우에만 작동합니다.

  2. 당신은 하나가 xylabelvalue 속성의 이름을 바꿀 필요하거나 당신은 그 값을 제공하는 함수를 만들어야합니다

    var chart = nv.models.multiBarChart(); 
    
    chart.x(function(d) { return d.label; }); 
    chart.y(function(d) { return d.value; }); 
    
    d3.select('#chart svg') 
        .datum(/* your data */) 
        .transition().duration(500).call(chart); 
    
+1

이것은 나를 위해 일했습니다! 도와 주셔서 감사합니다. – rhlsthrm

+1

특히 우리가 원하는 값을 제공하는 함수를 만드는 방법을 보여준 마지막 부분에 매우 도움이됩니다. 선택 상자와 연결하여 표시 할 값을 선택하는 데 사용했습니다. – dominicbri7

+0

굉장한 대답, 도움이된다 ... 고마워. – Vish