2016-04-28 36 views
0

我想弄清楚分組2條的方法,然後在它們之間留下一些間距。有沒有辦法在D3中做到這一點?我正在遵循的示例是http://codepen.io/mbostock/pen/JaemgD3分組吧

var data = [4, 8, 15, 16, 23, 42]; 

var x = d3.scale.linear() 
    .domain([0, d3.max(data)]) 
    .range([0, 420]); 

d3.select(".chart") 
    .selectAll("div") 
    .data(data) 
    .enter().append("div") 
    .style("width", function(d) { return x(d) + "px"; }) 
    .text(function(d) { return d; }); 

非常感謝提前。

+0

你是什麼意思間距?你能提供所需效果的截圖嗎? – Aziz

+0

您的意思是「酒吧4,酒吧8,空間,酒吧15,酒吧16,空間,酒吧23,酒吧42」? –

+0

嗯,我的意思是「酒吧4,酒吧8,空間,酒吧15,酒吧16,空間,酒吧23,酒吧42」。 – user3837019

回答

2

這裏的結果:https://jsfiddle.net/umeqw2f8/3/

我已經改變了自己的風格功能有點兒實現這一目標:

.style("width", function(d,i) { 
    if(i % 2 == 0 && i != 0){ 
    d3.select(this).style("margin-top", 5+"px") 
    }else if(i == 0){} 

    return x(d) + "px"; }) 

您可以更改模係數不同大小分組。例如,對於3號組:if(i % 3 == 0 && i != 0){

+1

我敢打賭10RPs,這不是什麼意思,雖然我真的很喜歡你的答案! –

+1

@GerardoFurtado哈哈,這個問題有點模糊,因爲你會感激。所以我提出了我的第一個答案,並認爲我們可以推進OP的評論。 – echonax

+0

謝謝你的時間和精力。對於模糊的問題抱歉。我的意思是「酒吧4,酒吧8,空間,酒吧15,酒吧16,空間,酒吧23,酒吧42」。 – user3837019

2

想法是將DIV中的條形組合起來,並用一些邊距或填充分隔組合div。

var data = [4, 8, 15, 16, 23, 42]; 

var gData=[]; 
for(var i=0;i<data.length/2;i++){ 
    gData[i]={ 
    "before":data[i*2], 
    "after":data[i*2+1] 
    }; 
} 
console.log(gData); 
var x = d3.scale.linear() 
    .domain([0, d3.max(data)]) 
    .range([0, 420]); 

myBarsEnter=d3.select(".chart") 
    .selectAll("div.bars") 
    .data(gData).enter().append('div').attr('class','bargroup'); 
    myBarsEnter.append('div') 
      .style("width", function(d) { return x(d.before) + "px"; }) 
      .text(function(d) { return d.before; }); 
myBarsEnter.append('div') 
      .style("width", function(d) { return x(d.after) + "px"; }) 
      .text(function(d) { return d.after; }); 

和更新的CSS是

.chart .bargroup{ 
margin-bottom:10px; 
} 
.chart .bargroup div { 
    font: 10px sans-serif; 
    background-color: steelblue; 
    text-align: right; 
    padding: 3px; 
    margin: 1px; 
    color: white; 
} 

您可以在下面的鏈接找到更新的代碼。

http://codepen.io/anon/pen/YqJpzK

+0

謝謝你的回答。介意告訴我你是如何改變酒吧的數量。例如說,如果我想分組3條或甚至4條。 – user3837019

+1

SAM83045創建了一個包含3個對象的數組,每個對象具有兩個鍵/值對。如果你想用數據分組3個小節,對於instante,你可以創建一個包含兩個對象的數組,每個對象具有3對鍵/值。順便說一句,請接受他的回答。 –

+0

@ user3837019:最好在將數據發送到D3之前對其進行分組,並根據這些數據,您可以輕鬆地繪製任意數量的條形圖。我已將您的數據修改爲組[{「之前」:4,「之後」:8},{「之前」:15「,」之後「:16},{」之前「:23之後,」之後「:42 }],然後通過它們進行打印。 –