2016-06-22 2 views
3

私は昨日同じような投稿をしましたが、私の問題が実際に何かについて間違っていたので、それをより正確に説明することができます。更新されたデータ(d3、js)に基づいて長方形のサイズを調整する

3つの矩形のサイズを新しいデータで更新したいが、データの変更による直接の結果としてサイズを調整するのではなく、親の幅に合わせて保持したい。

ここには以下のようなplnkがあります。

http://plnkr.co/edit/eVfgniBQLbJLiMvAtWLI

この例は、私がデータを変更したい方法を示しています。ここでの問題は、軸の幅が親の幅とは独立して拡大/縮小することです。

私は解決策がこれだと思っていました。

// OLD SOLUTION 
     x: d.y, 
     y: d.x, 
     x0: d.y0 

    // NEW SOLUTION 
     x: (d.y/calcTotal) * width, 
     y: d.x, 
     x0: (d.y0/calcTotal) * width 

これは、各長方形がサイズごとに変更するが、それを維持することを確実にするために、親コンテナの幅によってそれぞれ数回、新しいデータセットの合計額に比べて、各数の割合を算出し、親の幅に対して

ただし、私の新しいソリューションでデータが更新されたときに四角形のサイズが視覚的に変更されないため、残りの機能をここから修正する方法がわかりません。

アドバイスありがとうございます。

おかげ

答えて

2

問題は、作成ブロックでのみ矩形のデータを設定することです。

あなたは以下のような矩形とグループ内のデータを更新する必要があります。

//update the group with new data 
groups = svg.selectAll('g') 
    .data(dataset) 


if (create) { 
    groups 
    .enter() 
    .append('g').attr('class', 'stacked') 
    .style('fill', function(d, i) { 
     return colours(i); 
    }) 
    rects = groups.selectAll('.stackedBar') 
    .data(function(d, i) { 
     return d; 
    }) 

    rects 
    .enter() 
    .append('rect').attr('class', 'stackedBar') 
    .attr('x', function(d) { 
     return xScale(d.x0); 
    }) 

    .attr('height', height) 
    .attr('width', 0); 
} else { 
    .//update the rectangle with new data 
    rects = groups.selectAll('.stackedBar') 
    .data(function(d, i) { 
     return d; 
    }) 
} 
//now do transition. 

作業コードhere

+1

ああ、いいね。私たちが答えを組み合わせると、彼が望むものを正確に得ることができました。ありがとう! –

+1

感謝のシリルは、完璧に動作します! – alexc

1

は、私が何かを見逃しているかもしれませんが、あなたは自分のscript.jswidth='100%'width=400を変えたらどう? http://plnkr.co/edit/DKZdjposoN2omC55rM2d?p=preview

次に、data.JSONのデータを変更すると、親コンテナのパーセンテージに基づいて必要な幅が反映されます。

+0

これは動作しません - 私は最初の長方形ソリューションでフランスをクリックしたとき= 71 %、第2 = 29.8%、第3 = 32%である。最後のものを画面から外しています – alexc

+0

右ですが、それは親の幅に相対的なものです。これは '100%'が静的に 'width = 400; 'に設定されていなければ、コード内で同じことをします。これは親の幅に対して相対的になります。 'width = 400;'を指定すると、フランスを選択したときに3番目のセクションが表示されます。 –

+0

はい - 実際のデータが何であるかにかかわらず親の幅に相対的なデータを作成することが目標ですが、各矩形は親の幅に比例して表示されるため、最近の矩形を画面から外したくないので、私は彼らがすべて含まれ、100%以内に表現されてほしい – alexc

関連する問題