如何在 HTML 中使用 d3-cloud 词云可视化功能

如何在 HTML 中使用 d3-cloud 词云可视化功能

1.代码结构展示

在这里插入图片描述

2.在 head 中引入 d3.js 和 d3-cloud.js 文件

在这里插入图片描述

3.在 body 中定义一个 div 为父容器

在这里插入图片描述

4.在<script>脚本中获取容器,然后创建词云并显示,具体语法及 d3-cloud 文件下载见 https://github.com/jasondavies/d3-cloud

在这里插入图片描述

5.完整代码如下

<html>
  <head>
    <script src="https://d3js.org/d3.v6.min.js"></script>
    <script src="d3-cloud-master/build/d3.layout.cloud.js"></script>
  </head>

  <body>
    <div id="wordcloud"></div>

    <script>
      var words = [];
      for (var i = 1; i <= 50; i++) {
        words.push({ text: i, size: Math.random() * 90 });
      }


      // 获取容器元素
      var container = d3.select("#wordcloud");

      // 创建词云布局
      var layout = d3.layout
        .cloud()
        .size([700, 500])
        .words(words)
        .padding(5)
        .rotate(function () {
          // return ~~(Math.random() * 2) * 90;
          return (~~(Math.random() * 6) - 3) * 30;
          // return 0;
        })
        .font("Impact")
        .fontSize(function (d) {
          return d.size;
        })
        .on("end", draw);

      // 设置每个单词的颜色
      layout.words().forEach(function (word) {
        word.color = getRandomColor();
      });

      // 绘制词云
      layout.start();

      //绘制函数
      function draw(words) {
        d3.select("body")
          .append("svg")
          .attr("width", layout.size()[0])
          .attr("height", layout.size()[1])
          .attr("style", "background-color:pink")
          .append("g")
          .attr(
            "transform",
            "translate(" +
              layout.size()[0] / 2 +
              "," +
              layout.size()[1] / 2 +
              ")"
          )
          .selectAll("text")
          .data(words)
          .enter()
          .append("text")
          .style("font-size", function (d) {
            return d.size + "px";
          })
          .style("font-family", "Impact")
          .style("fill", function (d) {
            return d.color;
          }) // 设置每个单词的颜色
          .attr("text-anchor", "middle")
          .attr("transform", function (d) {
            return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
          })
          .text(function (d) {
            return d.text;
          });
      }

      // 生成随机颜色
      function getRandomColor() {
        var letters = "0123456789ABCDEF";
        var color = "#";
        for (var i = 0; i < 6; i++) {
          color += letters[Math.floor(Math.random() * 16)];
        }
        return color;
      }
    </script>
  </body>
</html>

6.成果展示

在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值