2012-11-02 26 views
18

nvd3を使用して縦積み棒グラフを作成しようとしています。 websiteの例のように、ランダムに生成された値とは異なり、離散データ値を使用します。nvd3離散値を持つ積み上げ棒グラフ

私はGroup/Stacked Bar Chartのライブコードの例を使い、自分の値を含むJSONデータを入れようとしました。私がしようとしたのは、横棒グラフからJSONデータを取り出し、それを縦棒グラフのデータとして入れたものでした。

これは私がグループ/積み上げ棒グラフ内のデータの代わりに、ライブのコード例で使用されるデータは次のとおりです。私は、データへのjavascriptのデータ()への関数呼び出しを置き換え

[ 
    { 
    "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属性、と共に使用されます。

残念ながら、正確なデータ形式については多くの文書がありませんでした。私が見つけたすべての例では、データを生成するためのいくつかの混乱した関数が使用されています。だからここに私が混在数値とテキストラベルを使用して作業してしまった例です:

  1. 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


    は今、あなたのコードには2つの問題があります

    を削除する必要がありますテキストでラベルを付ける軸の場合はです。
    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

関連する問題