当前位置:首页 > JavaScript

js实现云图

2026-04-06 18:52:08JavaScript

使用WordCloud库生成云图

安装WordCloud库:

npm install wordcloud

基础实现代码:

const WordCloud = require('wordcloud');

const canvas = document.getElementById('wordcloud-canvas');
const words = [
  ['JavaScript', 30],
  ['HTML', 25],
  ['CSS', 20],
  ['React', 18],
  ['Node.js', 15]
];

WordCloud(canvas, {
  list: words,
  weightFactor: 10,
  color: 'random-dark',
  backgroundColor: '#f0f0f0',
  rotateRatio: 0.5
});

使用D3.js创建自定义云图

安装D3.js:

js实现云图

npm install d3

实现代码:

import * as d3 from 'd3';
import 'd3-cloud';

const words = [
  {text: "JavaScript", size: 30},
  {text: "HTML", size: 25},
  {text: "CSS", size: 20},
  {text: "React", size: 18}
];

const layout = d3.layout.cloud()
  .size([800, 500])
  .words(words)
  .padding(5)
  .rotate(() => ~~(Math.random() * 2) * 90)
  .font("Impact")
  .fontSize(d => d.size)
  .on("end", draw);

layout.start();

function draw(words) {
  d3.select("#wordcloud-container")
    .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")
    .style("font-size", d => d.size + "px")
    .style("font-family", "Impact")
    .style("fill", (d, i) => d3.schemeCategory10[i % 10])
    .attr("text-anchor", "middle")
    .attr("transform", d => "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")")
    .text(d => d.text);
}

使用Chart.js插件生成云图

安装Chart.js和插件:

js实现云图

npm install chart.js chartjs-plugin-wordcloud

实现代码:

import Chart from 'chart.js';
import 'chartjs-plugin-wordcloud';

const ctx = document.getElementById('wordcloud-chart').getContext('2d');
const words = [
  {text: 'JavaScript', value: 30},
  {text: 'HTML', value: 25},
  {text: 'CSS', value: 20}
];

new Chart(ctx, {
  type: 'wordCloud',
  data: {
    labels: words.map(d => d.text),
    datasets: [{
      data: words.map(d => d.value),
    }]
  },
  options: {
    plugins: {
      wordcloud: {
        minRotation: 0,
        maxRotation: 0,
        fontFamily: 'Arial',
        fontWeight: 'bold',
        color: () => `rgb(${Math.floor(Math.random() * 255)}, ${Math.floor(Math.random() * 255)}, ${Math.floor(Math.random() * 255)})`
      }
    }
  }
});

使用HTML5 Canvas手动实现

基础实现代码:

const canvas = document.getElementById('custom-wordcloud');
const ctx = canvas.getContext('2d');
const words = [
  {text: 'JavaScript', size: 40},
  {text: 'HTML', size: 35},
  {text: 'CSS', size: 30}
];

function drawWordCloud() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  words.forEach(word => {
    ctx.font = `${word.size}px Arial`;
    const width = ctx.measureText(word.text).width;
    const x = Math.random() * (canvas.width - width);
    const y = Math.random() * (canvas.height - word.size);

    ctx.fillStyle = `hsl(${Math.random() * 360}, 70%, 50%)`;
    ctx.fillText(word.text, x, y);
  });
}

drawWordCloud();

云图数据预处理

从文本生成词频统计:

function generateWordFrequencies(text, minLength = 3) {
  const words = text.toLowerCase().match(/\b\w+\b/g) || [];
  const frequencies = {};

  words.forEach(word => {
    if(word.length >= minLength) {
      frequencies[word] = (frequencies[word] || 0) + 1;
    }
  });

  return Object.entries(frequencies)
    .sort((a, b) => b[1] - a[1])
    .slice(0, 50);
}

const sampleText = "JavaScript is a programming language...";
const wordData = generateWordFrequencies(sampleText);

标签: 云图js
分享给朋友:

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…