当前位置:首页 > VUE

Vue实现词云图

2026-02-19 19:00:43VUE

使用vue-wordcloud插件实现词云图

安装vue-wordcloud插件

npm install vue-wordcloud

在Vue组件中引入并使用

<template>
  <div>
    <word-cloud
      :data="wordData"
      :color="myColors"
      nameKey="word"
      valueKey="count"
    />
  </div>
</template>

<script>
import WordCloud from 'vue-wordcloud'

export default {
  components: { WordCloud },
  data() {
    return {
      wordData: [
        { word: 'Vue', count: 100 },
        { word: 'React', count: 85 },
        { word: 'Angular', count: 70 }
      ],
      myColors: ['#1f77b4', '#ff7f0e', '#2ca02c']
    }
  }
}
</script>

使用echarts实现词云图

安装echarts和echarts-wordcloud

Vue实现词云图

npm install echarts echarts-wordcloud

创建词云组件

<template>
  <div ref="wordcloud" style="width: 600px; height: 400px;"></div>
</template>

<script>
import * as echarts from 'echarts'
import 'echarts-wordcloud'

export default {
  mounted() {
    this.initWordCloud()
  },
  methods: {
    initWordCloud() {
      const chart = echarts.init(this.$refs.wordcloud)
      const option = {
        series: [{
          type: 'wordCloud',
          data: [
            { name: 'Vue', value: 100 },
            { name: 'React', value: 85 },
            { name: 'Angular', value: 70 }
          ],
          shape: 'circle',
          sizeRange: [12, 60]
        }]
      }
      chart.setOption(option)
    }
  }
}
</script>

自定义实现简单词云

使用CSS和JavaScript创建基础词云效果

Vue实现词云图

<template>
  <div class="word-cloud">
    <span 
      v-for="(word, index) in words" 
      :key="index"
      :style="{
        fontSize: `${word.size}px`,
        color: word.color,
        transform: `rotate(${word.rotate}deg)`
      }"
    >
      {{ word.text }}
    </span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      words: [
        { text: 'Vue', size: 40, color: '#42b983', rotate: 0 },
        { text: 'React', size: 35, color: '#61dafb', rotate: -15 },
        { text: 'Angular', size: 30, color: '#dd0031', rotate: 10 }
      ]
    }
  }
}
</script>

<style>
.word-cloud {
  width: 500px;
  height: 300px;
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
}
.word-cloud span {
  margin: 5px;
  padding: 5px;
  display: inline-block;
}
</style>

使用d3-cloud实现高级词云

安装d3-cloud

npm install d3-cloud

创建基于d3的词云组件

<template>
  <div ref="cloudContainer"></div>
</template>

<script>
import * as d3 from 'd3'
import cloud from 'd3-cloud'

export default {
  props: {
    words: {
      type: Array,
      default: () => [
        { text: 'Vue', size: 60 },
        { text: 'React', size: 50 },
        { text: 'Angular', size: 40 }
      ]
    }
  },
  mounted() {
    this.drawWordCloud()
  },
  methods: {
    drawWordCloud() {
      const layout = cloud()
        .size([500, 300])
        .words(this.words)
        .padding(5)
        .rotate(() => Math.floor(Math.random() * 2) * 90)
        .font('Impact')
        .fontSize(d => d.size)
        .on('end', this.drawWords)

      layout.start()
    },
    drawWords(words) {
      d3.select(this.$refs.cloudContainer)
        .append('svg')
        .attr('width', 500)
        .attr('height', 300)
        .append('g')
        .attr('transform', 'translate(250,150)')
        .selectAll('text')
        .data(words)
        .enter()
        .append('text')
        .style('font-size', d => `${d.size}px`)
        .style('font-family', 'Impact')
        .style('fill', () => `hsl(${Math.random() * 360}, 70%, 50%)`)
        .attr('text-anchor', 'middle')
        .attr('transform', d => `translate(${[d.x, d.y]})rotate(${d.rotate})`)
        .text(d => d.text)
    }
  }
}
</script>

响应式词云实现

添加窗口大小变化监听

<script>
export default {
  // ...其他代码
  mounted() {
    this.initWordCloud()
    window.addEventListener('resize', this.handleResize)
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.handleResize)
  },
  methods: {
    handleResize() {
      this.$nextTick(() => {
        this.initWordCloud()
      })
    }
    // ...其他方法
  }
}
</script>

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

相关文章

Vue 实现登出

Vue 实现登出

Vue 实现登出的方法 在 Vue 应用中实现登出功能通常涉及清除用户认证信息、重定向到登录页面或主页,并可能调用后端 API 注销会话。以下是几种常见的实现方式: 清除本地存储的认证信息 大多数前…

Vue前端路由实现

Vue前端路由实现

Vue前端路由的实现方式 Vue前端路由通常通过vue-router库实现,它是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是核心实现方法和步骤: 安装vue-router 通过…

Vue实现音乐列表

Vue实现音乐列表

Vue 实现音乐列表的方法 数据准备与绑定 在 Vue 中实现音乐列表,首先需要准备音乐数据。可以通过数组形式存储音乐信息,例如歌曲名称、歌手、封面图片和播放链接。数据可以存储在组件的 data 属性…

Vue拖拽怎么实现

Vue拖拽怎么实现

Vue拖拽实现方法 使用Vue实现拖拽功能可以通过原生HTML5的拖拽API或第三方库如vuedraggable来实现。以下是两种常见的方法: 使用HTML5拖拽API HTML5提供了原生的拖拽A…

Vue怎么实现记住我

Vue怎么实现记住我

Vue实现“记住我”功能的方法 在Vue中实现“记住我”功能通常涉及前端存储用户登录状态或凭据,常见方法包括使用浏览器的本地存储(localStorage/sessionStorage)或Cookie…

Vue调接口怎么实现

Vue调接口怎么实现

Vue调用接口的实现方法 在Vue中调用接口通常使用axios或fetch等HTTP客户端库,以下是具体实现方式: 安装axios 通过npm或yarn安装axios依赖: npm install…