d3标签云中的换行符

时间:2016-04-06 09:18:30

标签: javascript jquery d3.js svg

我正在使用它在我的应用程序中生成大量单词,并从json文件中获取数据,如下所示:

var a = [];

    for (var i=0; i < a.length; i++){
            a.push(a[i].word);
        }

这给了我们一个数组。

a = ["gsad","sagsa","gsag","sagas","gsag","gsagas","yhff","gag"];

我把它正确地显示在屏幕上,但由于行太长,它从边框出来了,我想给它一个链接断点而不是改变SVG大小,我怎么能这样做?

更新:

以下代码是我插入代码的方式:

var PositiveArr = [“gsad”,“sagsa”,“gsag”,“sagas”,“gsag”,“gsagas”,“yhff”,“gag”]; //考虑NegativeArr,NeutralArr具有相似的内容

var fill = d3.scale.category20();
                  d3.layout.cloud().size([600, 300])
                      .words([NegativeArr,NeutralArr,PositiveArr].map(function(d) {
                        return {text: d, size: 10 + Math.random() * 50};
                      }))
                      .rotate(function() { return ~~(Math.random() * 2) * 90; })
                      .font("Impact")
                      .fontSize(function(d) { return d.size; })
                      .on("end", draw)
                      .start();


                  function draw(words) {
                    d3.select("#pre-theme").append("svg")
                        .attr("width", 600)
                        .attr("height", 300)
                      .append("g")
                        .attr("transform", "translate(300,150)")
                      .selectAll("text")
                        .data(words)
                      .enter().append("text")
                        .style("font-size", function(d) { return d.size + "px"; })
                        .style("font-family",  "Impact, Arial")
                        .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; });
                  }  

解: 我发现自己是一个解决方案,我只是使用

将所有数组合并为一个
var allResult = PersonsArr.concat(PlacesArr,PatternsArr,ProductsArr,CompaniesArr); 

并将其插入.map

.words(entityResult.map(function(d) {
                        return {text: d, size: 10 + Math.random() * 50};
                      }))

1 个答案:

答案 0 :(得分:1)

解决方案:我发现自己是一个解决方案,我只是将所有数组合并为一个

var allResult = PersonsArr.concat(PlacesArr,PatternsArr,ProductsArr,CompaniesArr);

并将其插入.map

.words(entityResult.map(function(d) {
                        return {text: d, size: 10 + Math.random() * 50};
                      }))