【问题标题】:Words go out of the borders in d3.js tag cloudd3.js 标签云中的文字超出了边界
【发布时间】:2014-12-23 08:42:47
【问题描述】:

我想使用 d3 创建词标签云 .. 我找到了一个很好的例子 here 但是单词超出边界的问题,特别是在大字体的情况下,这个问题的截图

这是我的代码

<script src="../lib/d3/d3.js"></script>
<script src="../d3.layout.cloud.js"></script>
<script>
var fill = d3.scale.category20();

d3.layout.cloud().size([600, 600])
    .words([
        "Hello", "world", "normally", "you", "want", "more", "words",
        "than", "this"
    ].map(function(d) {
        return {
            text: d,
            size: 10 + Math.random() * 90
        };
    }))
    .padding(5)
    .rotate(function() {
        return ~~(Math.random() * 2) * 90;
    })
    .font("Impact")
    .fontSize(function(d) {
        return d.size;
    })
    .on("end", draw)
    .start();

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

有人知道解决办法吗?

【问题讨论】:

    标签: javascript d3.js tag-cloud


    【解决方案1】:

    只需更改draw()中的以下行:

            .attr("transform", "translate(150,150)")
    

    到:

            .attr("transform", "translate(350,350)")
    

    由于 SVG 的大小为 700x700,因此您希望 g 变换位于 SVG 的中间,因为文本元素锚定在中间。

    【讨论】:

    • 我已经在 3 天前找到了这个解决方案表格,但我忘记回答了。谢谢你的回答:)
    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2013-05-02
    • 2014-01-20
    相关资源
    最近更新 更多