我尝试使用d3和d3-cloud来显示关键字云。它工作正常,但我唯一的问题是单词重叠,我不明白为什么。我认为它来自fontSize,但我找不到确切的原因。screen here
下面是我的不同方法:
private _populate(keyword: any) {
const dataset = kw.map(function (d: any) { return { text: d.text, size: d.value }; });
console.log(dataset);
d3.layout.cloud()
.size([this._width, this._height])
.words(dataset)
.padding(1)
.rotate(0)
.fontSize((d: any) => d.size / 100)
.on('end', () => {
this._drawWordCloud(dataset);
})
.start();
}
private _drawWordCloud(words: any) {
this._svg
.append("g")
.attr("transform", "translate(" + this._width / 2 + "," + this._height / 2 + ")")
.selectAll("text")
.data(words)
.enter().append("text")
.style("font-size", (d: any) => d.size + "px")
.style("fill", "#69b3a2")
.style("font-family", "Impact")
.attr("text-anchor", "middle")
.attr("transform", (d: any) => "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")")
.text((d: any) => d.text);
}
.字体大小((d:any)=〉d.size / 100),因为我的值非常高(~ 10000)。
有人能帮助我吗?我找到的各种解决方案(很少)都不起作用。
谢谢!
1条答案
按热度按时间of1yzvn41#
我终于找到了解决办法。你必须在第一个方法“_populate”中添加你想要使用的字体。在我的例子中:
我们不改变第二种方法中的行:
就这样吧!我希望它能帮助到其他人