2017-09-20 11 views
1

D3とjavascriptを初めて使用しています。私はアニメーション垂直スタックバーチャートを構築しようとしています。水平積み棒グラフの例として、hereが見つかりました。しかし、それを微調整した後、私は縦に積まれた棒グラフを下に伸ばしています。ここにはmy edited fiddleがあります。D3.js積み重ね棒グラフが負の方向に拡大

更新:下記によって提案されたものを含め、いくつかの微調整を行った後、これは最終的に動作します:final working upward growing stacked bar chart は、私はこのコードチャンク内にあるべきで変更する必要がある場所(複数可)を感じる

rects = groups.selectAll('.stackedBar') 
     .data(function(d,i) {console.log("data", d,i); return d; }) 
     .enter() 
     .append('rect').attr('class','stackedBar') 
     .attr('y', function(d) { return yScale(d.y0); }) 
     .attr('x', function(d, i) {return xScale(d.x); }) 
     .attr('height',0) 
     .attr('width', xScale.rangeBand()); 

     console.log(document.querySelectorAll(".stacked")); 
     var abc=document.querySelectorAll(".stackedBar"); 

    rects 
     .transition() 
     .delay(function(d,i,j){console.log("pre",j); return j*500;}) 
     .attr("y", function(d) { return yScale(d.y0); }) 
     .attr("height", function(d) { return yScale(d.y); }) 
     .duration(1000); 

しかし、私は周りを検索し、yの最初の位置であるyScale範囲を元に戻そうとしましたが、どれも働いていませんでした。私はまた、私のyAxisはいつも私のX軸の下にあることに気づいた。

+0

データが0で始まり、軸が上になると、バーは上から大きくなります。あなたはバーを下から上に(1200 +から始まる)成長させるか、全体の方向を変えて、あなたのx軸を底にしたいですか? – 3TW3

+0

私はx軸を下にして、元の例のようにバーが上向きに成長したいのですが、縦方向にします。 – Rui

+0

私は以下の回答を追加しました。 – 3TW3

答えて

1

まず、あなたのyスケールの向きを変更する必要があります。

yScale = d3.scale.linear().domain([0,yMax]).range([height,0]) 

そして、それは「高さ」でスタートして、x軸も同様に変換する必要があります。トップはので、あなたのSVGの底が「高」に等しい高さ= 0を持っているSVGで:

rects 
    .transition() 
    .delay(function(d,i,j){console.log("pre",j); return j*500;}) 
    .attr("y", function(d) { return yScale(d.y + d.y0); }) 
    .attr("height", function (d) { return yScale(d.y0) - yScale(d.y + d.y0); }) 
    .duration(1000); 

svg.append('g') 
    .attr('class', 'axis') 
    .call(xAxis) 
    .attr("transform", "translate(0," + height + ")"); 

なく、少なくとも最後に、あなたは次のようにあなたの積み上げ棒グラフの建物の向きを変更する必要があります

ここに更新されたfiddleがあります。

+1

はい!あなたの答えはちょうど私が4時間かけて行った変更とまったく同じです...私はこれをもっと早く見ることができたらいいと思います。ありがとうと私はまだ他の人の例を読んで数多くのアプローチを試みる4時間の間に束を学んだと思います。 – Rui

+0

よくできました!私は良い質問を立てて他の人と話し合おうとするときに学ぶのが良い方法だと思います。 – 3TW3

1

SVGは左上隅から始まるので、「高さ」はページの高さを意味するため、いくつかのことは期待どおりに機能します。

まず、yスケールから始めます。範囲を(0、高さ)ではなく逆順(高さ、0)にマッピングする必要があります。

yScale = d3.scale.linear().domain([0,yMax]).range([height,0]),1 

同様に、x軸は「高さ」で開始するように変換する必要があります。

 svg.append('g') 
     .attr('class', 'axis') 
     .call(xAxis) 
     .attr("transform", "translate(0," + height + ")");' 
+0

あなたの提案ごとに変更を加えました。 x軸は今底部にあり、y軸はx軸より上にあります。これは大きな進歩です。しかし、実際のティックはまだ逆の順序です:1200は底部にあり、0は上部にあります。 – Rui

+0

'y'と 'height'の最終値を変更するなど、もう少し変更を加えました。今これは私が望むのとまったく同じです。働くフィドルはここにあります:http://jsfiddle.net/maggiehu/e0r2pz​​c0/5/ – Rui

関連する問題