var layout = d3.layout.cloud() .size([500, 300]) .words(theme) // wordList.map(function(d) { // return {text: d, size: 10 + Math.random() * 50}; // }) .padding(5) .rotate(function() { return ~~(Math.random() * 1) * 90; }) .font("STXinwei") .fontSize(function(d) { return d.size; }) .on("end", draw); layout.start(); function draw(words) { d3.select(".wordcloud").html(""); //enter var mywords=d3.select(".wordcloud") .append("svg") .attr("width", layout.size()[0]) .attr("height", layout.size()[1]) .append("g") .attr("transform", "translate(" + layout.size()[0] / 2 + "," + layout.size()[1] / 2 + ")") .selectAll("text") .data(words) .enter() .append("text") .attr("class","word") .style("font-size", function(d) { return d.size + "px"; }) .style("font-family", "STXinwei") .style("fill", function(d, i) { fill(i); }) .attr("text-anchor", "middle") .attr("transform", function(d) { return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")"; }) .text(function(d) { // console.log(d.word); return d.word; })//这里要用d,而不是用i .on("mouseover",function(d,i){ d3.select(this) .transition() .duration(500) .attr("fill","gray"); d3.select(this) .select("text") .text(d.size) .attr("class",".poems"); // return d.size; }) .on("mouseout",function(d,i){ d3.select(this) .transition() .duration(1000) .attr("fill","black"); }) .on("click", function(d,i) { // console.log(i); // console.log(i.word); // console.log(d); showPoems(i.word); })//这里要用i,而不是用d .append("title") .text(function(d){ return "使用次数:"+d.size+"次"; }); 修改上述代码使得词云的显示集中在某个固定的多边形内,词与词之间越紧密越好
时间: 2024-03-07 16:47:31
浏览: 81
要实现词云的[显示](https://geek.csdn.net/educolumn/103ca72607c717122e068b9f06a24df6?spm=1055.2569.3001.10083)集中在某个固定的多边形内,可以通过以下[步骤](https://geek.csdn.net/educolumn/41e918968ef7840279c31b7f6a0950e3?spm=1055.2569.3001.10083)进行修改:
1.定义一个多边形的路径,并将其作为 [clip](https://geek.csdn.net/educolumn/0830e95abf03b0b8727f8e6fb0b6ac18?spm=1055.2569.3001.10083)Path 元素加入到 SVG 中。
2.在绘制词云之前,将 layout.words() 的值限制在多边形内部。可以通过以下方法实现:
- 遍历所有的词,将其位置限制在多边形内部。
- 在 layout.on("end", draw) 方法中,遍历所有的词,如果其位置在多边形外部,则将其移动到多边形内部。
3.在绘制词云时,将其位置限制在多边形内部。
下面是修改后的[代码](https://geek.csdn.net/educolumn/1572ef9b473b4e00f6b2bf6d428b7c27?spm=1055.2569.3001.10083):
// 定义多边形的路径
var polygon = [[100, 100], [400, 100], [400, 300], [100, 300]];
var polygonPath = "M" + polygon.join("L") + "Z";
// 将多边形加入到 SVG 中
d3.select("svg").append("[clip](https://geek.csdn.net/educolumn/0830e95abf03b0b8727f8e6fb0b6ac18?spm=1055.2569.3001.10083)Path")
.attr("id", "polygon")
.append("path")
.attr("d", polygonPath);
// 将 layout.words() 的值限制在多边形内部
layout.words(layout.words().filter(function(d) {
var x = d.x + layout.size()[0] / 2;
var y = d.y + layout.size()[1] / 2;
return d3.polygonContai
```