2016-07-10 3 views
0

私は単純な棒グラフを作成するためにd3.jsを使っています。私はd3.csvデータを使って棒グラフを作った。しかし、今私はcsvfileから1つの列だけを使用しようとしています。d3のCSVデータセットのテキストフィールドをカウントするjs

この列のすべての項目は文字列値です。具体的には都市です。それらの一部はユニークですが、他のものは複数回出現します。

例:

city 
Mor 
Gdl 
Mex 
Bog 
Mad 
Rio 
Bar 
Mor 
Gdl 
Mor 
Rio 
Mor 
Bog 
Mor 

私はこのコラムを使用して棒グラフを作成します。 x valueは都市となり、y valueは都市の出現回数になります。

私はこのコードを使用しています。しかし、私はy valueを取得することはできません。

d3.csv("../cities.csv", function(error, dataset) { 
    dataset.forEach(function(d) { 
     d.count = +d.city; 
    }); 
    x.domain(dataset.map(function(d) { return d.city; })); 
    y.domain([0, d3.max(dataset, function(d) { return d.count; })]); 
    svg.append('g') 
     .attr('class', 'x axis') 
     .attr('transform', 'translate(0,' + h + ")") 
     .call(xAxis); 
    svg.append('g') 
     .attr('class', 'y axis') 
     .call(yAxis) 
     .append('text') 
     .attr('transform', 'rotate(-90)') 
     .attr('y', 6) 
     .attr('dy', '.71em') 
     .style('text-anchor', 'end') 
     .text('Número de contratistas'); 
    var bars = svg.selectAll('.bar') 
     .data(dataset) 
     .enter() 
     .append('rect') 
     .attr('class', 'bar') 
     .attr('x', function(d) { return x(d.city); }) 
     .attr('width', x.rangeBand()) 
     .attr('y', function(d) { return y(d.count); }) 
     .attr('height', function(d) { return h - y(dataset.map(d.count));}); 
}); 

このコードから、各都市からのカウントを取得するために私の最初の試みでした:

dataset.forEach(function(d) { 
    d.count = +d.city; 
}); 

どのように私はこのようなものを得るために、このfucntionを向上させることができます棒グラフの?

改善のための提案は歓迎します!ありがとう。

答えて

1

あなたが正しいと分かっている場合は、各都市がどのくらいの頻度で出現したかを数え、それをd.countに保存したいと考えています。 これを試してみてください:

// define count object that holds count for each city 
var countObj = {}; 

// count how much each city occurs in list and store in countObj 
dataset.forEach(function(d) { 
    var city = d.value; 
    if(countObj[city] === undefined) { 
     countObj[city] = 0; 
    } else { 
     countObj[city] = countObj[city] + 1; 
    } 
}); 
// now store the count in each data member 
dataset.forEach(function(d) { 
    var city = d.value; 
    d.count = countObj[city]; 
}); 
+0

おかげで、@Stuurpiekは、私はあなたの例を試してみましたが、それは各都市からの値をプロットしません。私はd3.histogram()が解決策であると思っています。 – estebanpdl

+0

私のコードを少し変更すれば、あなたの例は素晴らしいです!ありがとう! – estebanpdl

+0

1つの質問:「未定義」は何を表していますか? – estebanpdl

関連する問題