1

来自 Json/array 的 d3.js Tag Cloud 大小的另一个问题?

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 可能会有所不同,我想设置一个大小范围(最小 10 像素到 50 像素)。

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};
  }))

我将“size:s”部分更改为许多其他可能猜到的形式,但它不起作用。我仍然熟悉 d3.js/jquery/svg 语法,所以现在我真的不知道如何设置它。请帮忙!

4

1 回答 1

3

s是将域映射到范围的函数。所以将行更改为

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

您还需要在定义中交换.domain和(并将逗号更改为点)——设置输入范围和输出范围。.ranges.domain.range

于 2012-05-23T20:57:27.593 回答