2012-05-23 49 views
1

d3.js Tag Cloud size from a Json/array?d3.js標籤雲:設置文字大小範圍

var jWord = ["abc","def","ghi","jkl"]; 
var jCount = [2, 5, 3, 8]; 

    d3.layout.cloud().size([650, 140]) 
     .words(d3.zip(jWord, jCount).map(function(d) { 
     return {text: d[0], size: d[1]}; 
     })) 
     .rotate(function() { return 0; }) 
     //.rotate(function() { return ~~(Math.random() * 2) * 90; }) 
     .fontSize(function(d) { return d.size; }) 
     .on("end", draw) 
     .start(); 

的另一個問題現在我用jCount的原始值作爲TEXTSIZE。假設jCount可能會有所不同,我想設置一個大小範圍(最小10px到50px)。

var maxCount = d3.max(jCount); 
var s = d3.scale.linear().domain([10,50]),range([0, maxCount)]); 

然後,我改變

.words(d3.zip(jWord, jCount).map(function(d) { 
    return {text: d[0], size: s}; 
    })) 

我改變「尺碼:S」的一部分到許多其他可能猜到的形式,但它不工作。我仍然熟悉d3.js/jquery/svg語法,所以現在我無法弄清楚如何設置它。請幫忙!

回答

3

s是一個將域映射到範圍的函數。所以行更改爲

.words(d3.zip(jWord, jCount).map(function(d) { 
    return {text: d[0], size: s(d[1]) }; 
})) 

您還需要交換.domain.ranges定義(和更改逗號點) - .domain設置輸入範圍和.range輸出範圍。

+1

非常感謝。根據你的建議:我改變了var s = d3.scale.linear()。domain([2,maxCount])。range([10,50]);感謝您定義域和範圍。 :-) – clerksx