我正在尝试使用wordcloud2.js来生成一些词云。使用给出的示例可以正常工作:
var options =
{
list : [
["Pear", "9"],
["Grape", "3"],
["Pineapple", "8"],
["Apple", "5"]
],
gridSize: Math.round(16 * document.getElementById('canvas_cloud').offsetWidth / 1024),
weightFactor: function (size) {
return Math.pow(size, 1.9) * document.getElementById('canvas_cloud').offsetWidth / 1024;
}
}
WordCloud(document.getElementById('canvas_cloud'), options);
但是,我正在努力使用具有以下结构的 JSON 文件中的数据填充“列表:”:
[
{
"wordCloud": "Manchester",
"Freq": 2321
},
{
"wordCloud": "Munich",
"Freq": 566
},
{
...
},
{
"wordCloud": "Madrid",
"Freq": 6
}
]
我知道这是因为我对将值推送到数组的知识有限。到目前为止,我的尝试是:
$.getJSON('json/wordCloudGWT-' + site + '.json', function (data) {
var wordCloudGWT = [];
for (var i=0;i<100;i++) {
wordCloudGWT.push([data[i].wordCloud, data[i].Freq]);
};
console.log(wordCloudGWT);
var options =
{
list : wordCloudGWT,
gridSize: Math.round(16 * document.getElementById('canvas_cloud').offsetWidth / 1024),
weightFactor: function (size) {
return Math.pow(size, 1.9) * document.getElementById('canvas_cloud').offsetWidth / 1024;
}
}
WordCloud(document.getElementById('canvas_cloud'), options);
console.log(wordCloudGWT); 显示一个包含 100 个(对象?)的数组,每个长度为 2,但 wordcloud 没有显示。我在浏览器的控制台中看到一个错误,我认为这是因为 wordcloud2.js 没有解释 list : wordCloudGWT 我(错误地)认为它应该是。
如果我以这种方式强行创建列表
list : [
[data[0].wordCloud, "9"],
[data[1].wordCloud, "3"],
[data[2].wordCloud, "8"],
[data[3].wordCloud, "5"]
],
单词显示正确,但这种方法有两个问题:
- 不考虑词的实际频率(词的大小)
- 肯定有更优雅的方式来生成列表,因为手动添加 100 行代码
对于第一点,我认为我可以通过手动编辑列表来解决这个问题:
list : [
[data[0].wordCloud, data[0].Freq],
[data[1].wordCloud, data[1].Freq],
[data[2].wordCloud, data[2].Freq],
[data[3].wordCloud, data[3].Freq]
],
但是,这样做会以我第一次尝试时出现的相同 JS 错误告终。
有什么提示可以帮助我绕过困难吗?