D3.js 生成词云图

前两篇文章介绍了在Python中使用wordcloud模块生成词云图,那么怎样在html中直接生成词云图呢?

下面介绍一种对小白特别友好的方式:d3.js(官网地址:https://d3js.org/

需要准备的js:

<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="d3.layout.cloud.js"></script>

d3.layout.cloud.js和示例代码都放在github中,有兴趣自取。

github地址:https://github.com/736755244/d3.js-

1、简单效果如下:

 

2、代码如下:

<!--html-->
<div id="container"></div>

<!--js-->
 //获得数据
	 var frequency_list = [
		 {"text":"好看", "size":50},
		 {"text":"安利", "size":20},
		 {"text":"一定去看", "size":40},
		 {"text":"三刷啦", "size":30},
		 {"text":"超感人的", "size":19},
		 {"text":"上座率爆炸", "size":100},
		 {"text":"人满为患", "size":50},
		 {"text":"抢到票了", "size":70},
		 {"text":"特效炒鸡棒", "size":90},
		 {"text":"泪目", "size":120},
		 {"text":"真的好好看", "size":54},
		 {"text":"哈哈哈哈", "size":555},
		 {"text":"大家随意", "size":220},
		 {"text":"搞起来", "size":80},
		 {"text":"五排啊", "size":19},
		 {"text":"王者上机", "size":100}
	 ]

   //自定义一个线性非连贯比例尺来进行给不同大小的词赋颜色.
//   var color = d3.scale.linear()
//            .domain([0,1,2,3,4,5,6,10,15,20,100])
//            .range(["#ddd", "#ccc", "#bbb", "#aaa", "#999", "#888", "#777", "#666", "#555", "#444", "#333", "#222"]); 
    var color = d3.scale.category20();  //直接使用d3的方法,产生20种类别的颜色


    var layout = d3.layout.cloud()
			.size([400, 300])
            .words(frequency_list)
            .rotate(0)
            .fontSize(function(d) { return d.size; })
            .on("end", draw);
	
    layout.start();

    function draw(words) {
        d3.select("#container").append("svg")//根据id插入svg
                .attr("width", layout.size()[0])//宽度
                .attr("height", layout.size()[1])//高度
                .attr("viewBox","0 0 600 350")//可见区域
                .attr("style", "border: 1px solid black")//区域样式
                .attr("preserveAspectRatio","xMaxYMax meet")
                .attr("class", "wordcloud")
                .append("g")
                .attr("transform", "translate(200,100)")
                .selectAll("text")
                .data(words)
                .enter().append("text")
                .style("font-size", function(d) { return d.size + "px"; })
                .style("fill", function(d, i) { return color(i); })//颜色
                .attr("transform", function(d) {//每个词条的偏移量
                    return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
                })
                .text(function(d) { return d.text; });//内容
    }

 


相关问题欢迎留言讨论!

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HTML 本身不支持读取文件,但可以通过 JavaScript 来实现。以下是一份基本的代码示例: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>词云图</title> <script src="https://d3js.org/d3.v6.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/d3-cloud@1.2.5/build/d3.layout.cloud.js"></script> </head> <body> <div id="wordcloud"></div> <script> // 读取文本文件并生成词云图 d3.text("example.txt", function(error, text) { if (error) throw error; // 对文本进行分词 var words = text.split(/[\s,]+/) .map(function(word) { return {text: word, size: Math.random() * 50 + 10}; }); // 生成词云图 var wordcloud = 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); wordcloud.start(); // 渲染词云图 function draw(words) { d3.select("#wordcloud").append("svg") .attr("width", 500) .attr("height", 500) .append("g") .attr("transform", "translate(250,250)") .selectAll("text") .data(words) .enter().append("text") .style("font-size", function(d) { return d.size + "px"; }) .style("font-family", "Impact") .style("fill", function() { return "rgb(" + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + ")"; }) .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> ``` 这个例子使用了 D3.js 库和 d3-cloud 插件来生成词云图,并使用 `d3.text` 方法从文件中异步读取文本数据。在读取完文本数据后,使用正则表达式将文本分割成单词,并将每个单词保存为一个包含文本和大小的对象。然后使用 D3.js 库和 d3-cloud 插件来生成词云图,并在绘制词云图时将每个单词的文本和大小绑定到 SVG 元素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值