我正在尝试使用D3创建一个词云。要做到这一点,我正在修改Jason Davis的代码:https://github.com/jasondavies/d3-cloud/blob/master/examples/simple.html
我想更改代码,以便我可以只使用更大量的文本链接到.txt或.csv文件,而不是使用单词数组。
我尝试使用d3.text()和d3.csv()方法,但我做错了。既然两个 方法调用URL,我使用数据URL生成器(http://dataurl.net/#dataurlmaker)将文本文件转换为URL。然后我更改了代码并插入了dataurl,如下所示:
var fill = d3.scale.category20();
var text = d3.text(data:text/plain;base64,RGVsbCwgdGhl....continued....more...URLdata)
d3.layout.cloud().size([300, 300])
.words(text.map(function(d) {
return {text: d, size: 10 + Math.random() * 90};
}))
.rotate(function() { return ~~(Math.random() * 2) * 90; })
.font("Impact")
.fontSize(function(d) { return d.size; })
.on("end", draw)
.start();
我尝试的第二个选项是将文本插入到html中的脚本标记中,然后在JS代码中引用它,如下所示:
<!DOCTYPE html>
<script src="../lib/d3/d3.js"></script>
<script id="text" type="text/plain">Dell, the company, has...more..text...</script>
<script src="../d3.layout.cloud.js"></script>
<body>
<script>
var fill = d3.scale.category20();
var text = d3.select("#text");
d3.layout.cloud().size([300, 300])
.words(text.map(function(d) {
return {text: d, size: 10 + Math.random() * 90};
}))
etc........
有人可以帮我找出一种读取.txt或.csv文件的方法吗? 谢谢!
答案 0 :(得分:2)
更新:
你能看到这个吗?
http://bl.ocks.org/8bb2b55d2c5cf5667b01
熟悉d3和.csv文件工作的一种方法 是在github上查看来自Scott Murray's d3-book的代码示例。 (第12章是你可以复习的地方。) https://github.com/alignedleft/d3-book/tree/master/chapter_12
无论如何,我已经在修改过的版本中使用了us-cities.csv 杰森戴维斯github的例子。
希望这有帮助。
<强>代码强>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>D3 CSV</title>
</head>
<body>
<script src="d3.v3.js"></script>
<script src="cloudlayout.js"></script>
<script type="text/javascript">
var fill = d3.scale.category20();
var cityData = [],
width = 500,
height = 500;
d3.csv("us-cities.csv", function(data) {
// build the list of city names
data.forEach( function (d) {
cityData.push(d.place);
});
d3.layout.cloud().size([500, 500])
.words(cityData.map(function(d) {
return {text: d, size: 10 + Math.random() * 90};
}))
.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", 500)
.attr("height", 500)
.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>
</body>
</html>