我正在使用
我把代碼放在這里作為參考。
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<!--script src="http://d3js.org/d3.v3.min.js"></script-->
<script src="https://d3js.org/d3.v4.js"></script>
<script src="https://rawgit.com/jasondavies/d3-cloud/master/build/d3.layout.cloud.js"></script>
<script>
//Simple animated example of d3-cloud - https://github.com/jasondavies/d3-cloud
//Based on https://github.com/jasondavies/d3-cloud/blob/master/examples/simple.html
// Encapsulate the word cloud functionality
function wordCloud(selector) {
//var fill = d3.scale.category20();
//Construct the word cloud's SVG element
var svg = d3.select(selector).append("svg")
.attr("width", 500)
.attr("height", 500)
.append("g")
.attr("transform", "translate(250,250)");
//Draw the word cloud
function draw(words) {
var cloud = svg.selectAll("g text")
.data(words, function(d) { return d.text; })
//Entering words
cloud.enter()
.append("text")
.style("font-family", "Impact")
.style("fill", "black")
.attr("text-anchor", "middle")
.attr('font-size', 1)
.text(function(d) { return d.text; });
//Entering and existing words
cloud
.transition()
.duration(600)
.style("font-size", function(d) { return d.size "px"; })
.attr("transform", function(d) {
return "translate(" [d.x, d.y] ")rotate(" d.rotate ")";
})
.style("fill-opacity", 1);
//Exiting words
cloud.exit()
.transition()
.duration(200)
.style('fill-opacity', 1e-6)
.attr('font-size', 1)
.remove();
}
//Use the module pattern to encapsulate the visualisation code. We'll
// expose only the parts that need to be public.
return {
//Recompute the word cloud for a new set of words. This method will
// asycnhronously call draw when the layout has been computed.
//The outside world will need to call this function, so make it part
// of the wordCloud return value.
update: function(words) {
d3.layout.cloud().size([500, 500])
.words(words)
.padding(5)
.rotate(function() { return ~~(Math.random() * 2) * 90; })
.font("Impact")
.fontSize(function(d) { return d.size; })
.on("end", draw)
.start();
}
}
}
//Some sample data - http://en.wikiquote.org/wiki/Opening_lines
var words = [
"You don't know about me without you have read a book called The Adventures of Tom Sawyer but that ain't no matter.",
"The boy with fair hair lowered himself down the last few feet of rock and began to pick his way toward the lagoon.",
"When Mr. Bilbo Baggins of Bag End announced that he would shortly be celebrating his eleventy-first birthday with a party of special magnificence, there was much talk and excitement in Hobbiton.",
"It was inevitable: the scent of bitter almonds always reminded him of the fate of unrequited love."
]
//Prepare one of the sample sentences by removing punctuation,
// creating an array of words and computing a random size attribute.
function getWords(i) {
return words[i]
.replace(/[!\.,:;\?]/g, '')
.split(' ')
.map(function(d) {
return {text: d, size: 10 Math.random() * 60};
})
}
//This method tells the word cloud to redraw with a new set of words.
//In reality the new words would probably come from a server request,
// user input or some other source.
function showNewWords(vis, i) {
i = i || 0;
vis.update(getWords(i % words.length))
setTimeout(function() { showNewWords(vis, i 1)}, 2000)
}
//Create a new instance of the word cloud visualisation.
var myWordCloud = wordCloud('body');
//Start cycling through the demo data
showNewWords(myWordCloud);
</script>
注意:我將示例中的填充顏色編輯為黑色。如果要在d3 v4或更高版本中使用原始調色板,則需要使用var fill = d3.scaleOrdinal(d3.schemeCategory10)
uj5u.com熱心網友回復:
merge好的,所以我做了一些挖掘,他們基本上從版本 v4 開始將輸入和更新功能合并為一個。
因此,要使上述作業正常,您必須更換
//Entering words
cloud.enter()
.append("text")
.style("font-family", "Impact")
.style("fill", "black")
.attr("text-anchor", "middle")
.attr('font-size', 1)
.text(function(d) { return d.text; });
//Entering and existing words
cloud
.transition()
.duration(600)
.style("font-size", function(d) { return d.size "px"; })
.attr("transform", function(d) {
return "translate(" [d.x, d.y] ")rotate(" d.rotate ")";
})
.style("fill-opacity", 1);
和
//Entering words
cloud.enter()
.append("text")
.style("font-family", "Impact")
.style("fill", "black")
.attr("text-anchor", "middle")
.attr('font-size', 1)
.text(function(d) { return d.text; })
//Entering and existing
.merge(cloud).transition()
.duration(600)
.style("font-size", function(d) { return d.size "px"; })
.attr("transform", function(d) {
return "translate(" [d.x, d.y] ")rotate(" d.rotate ")";
})
.style("fill-opacity", 1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482536.html
標籤:javascript d3.js 词云
