0

Jason Davies による D3 のワード クラウド ライブラリを使用しています。これは、私が使用している通常のコードであり、ワード クラウドの作成に問題なく機能します。

    d3.layout.cloud().size([width, height])
            .words(d3.zip(vis_words, vis_freq).map(function(d) {
                                    return {text: d[0], size: wordScale(d[1]) };
                                    }))
            .padding(1)
            .rotate(function() { return ~~(Math.random() * 2) * 0; })
            .font("times")
            .fontSize(function(d) { return d.size; })
            .on("end", draw)
            .start();

    function draw(words) {
            d3.select(curr_id).append("svg")
                    .attr("width", width)
                    .attr("height", height)
                    .append("g")
                    .attr("transform", "translate(" + width/2 + "," +  height/2 + ")")
                    .selectAll("text")
                    .data(words)
                    .enter()
                    .append("text")
                    .transition()
                    .delay(function(d,i){
                                    return i*100;
                                    })
                    .duration(1000)
                    .ease("elastic")
                    .style("font-size", function(d) { return d.size + "px"; })
                    .style("font-family", "times")
                    .style("fill", function(d, i) { return fill(i); })
                    .attr("text-anchor", "middle")
                    .attr("transform", function(d) {
                                    return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
                                    })
                    .text(function(d) { return d.text; });
    }

ワード クラウド内のどの単語の頻度が異なるか (サイズで指定)、または一部の単語がまったく存在しないかに基づいて、特定の値を選択するタイム スライダーがあります。現在行っているワード クラウド全体を再描画せずに更新する必要があります。ある意味では、単語の位置を固定し、スライダーで選択した値に基づいて単語のサイズと存在するかどうかを更新したいですか?

このために関数描画に更新関数を入力する必要がありますか? 私は確かに D3 を初めて使用しますが、何か助けはありますか?

4

1 に答える 1

1

textこれを行うには、既存の要素を選択し、font-sizeそれらのプロパティを設定します。これを行うコードは次のようになります。

d3.select("svg").selectAll("text")
  .style("font-size", function(d, i) { // do something });
于 2014-03-04T13:20:10.597 に答える