Vue3+@antv/g2plot 生成词云图的效果

 更新时间:2024年12月27日 10:56:19   作者:小阳生煎  
词云图是一种文本可视化技术,用于展示文本数据中关键词的频次或重要性,文章介绍了如何在Vue3中使用@antv/g2plot生成词云图,并解释了如何共享颜色和随机生成颜色的组件,感兴趣的朋友一起看看吧
@antv/g2plot 是一个基于 AntV 的图表库属于antv库的一部分
用于快速创建各种类型的图表
支持折线图、柱状图、饼图、散点图等多种图表类型
@antv/g2plot 属于antv库的一部分 g2plot是在g2基础上封装的 
npm install @antv/g2plot --save

效果

所有值共享一个颜色并且每次刷新颜色随机生成

组件页面

components-pop.vue

<template>
  <div ref="wordCloudContainer" :style="{ width: '100%', height: '400px' }"></div>
</template>
<script>
import { onMounted, ref } from 'vue';
import { WordCloud } from '@antv/g2plot';
export default {
  name: 'WordCloudComponent',
  setup() {
    const wordCloudContainer = ref(null);
    onMounted(() => {
      const data = [
{value: 67, name: '红腹角雉'},
{value: 98, name: '麝牛'},
{value: 97, name: '山舌鱼'},
{value: 100, name: '羚羊'},
{value: 37, name: '非洲王子'},
{value: 83, name: '麋鹿'},
{value: 60, name: '中华鲟'},
{value: 42, name: '鮪鱼'},
{value: 96, name: '射水鱼'},
{value: 54, name: '果子狸'},
{value: 33, name: '小春鱼'},
{value: 84, name: '水獭'},
{value: 86, name: '刺猬'}
      ];
   const getRandomColor = () => {
      const letters = '0123456789ABCDEF';
      let color = '#';
      for (let i = 0; i < 6; i++) {
        color += letters[Math.floor(Math.random() * 16)];
      }
      return color;
    };
      const wordCloud = new WordCloud(wordCloudContainer.value, {
        data,
        wordField: 'name',
        weightField: 'value',
        sizeRange: [12, 60],
        color: getRandomColor(),
        shape: 'circle',
        wordStyle: {
          fontFamily: 'Verdana',
          fontWeight: 'bold',
          // 可以添加其他文本样式
        },
        // 其他配置
      });
      wordCloud.render();
    });
    return {
      wordCloudContainer,
    };
  },
};
</script>
<style scoped>
/* 你可以在这里添加组件的样式 */
</style>

使用页面

<template>
  <div id="app">
    <WordCloudComponent />
  </div>
</template>
<script>
import WordCloudComponent from '@/components/pop.vue';
export default {
  name: 'App',
  components: {
    WordCloudComponent,
  },
};
</script>
<style>
/* 你可以在这里添加应用的样式 */
</style>

不同值随机生成不同颜色并且每次刷新值随机生成

组件页面

components-pop.vue

<template>
  <div ref="wordCloudContainer" :style="{ width: '100%', height: '400px' }"></div>
</template>
<script>
import { onMounted, ref } from 'vue';
import { WordCloud } from '@antv/g2plot';
export default {
  name: 'WordCloudComponent',
  setup() {
    const wordCloudContainer = ref(null);
    // 随机生成颜色的函数
    const getRandomColor = () => {
      const letters = '0123456789ABCDEF';
      let color = '#';
      for (let i = 0; i < 6; i++) {
        color += letters[Math.floor(Math.random() * 16)];
      }
      return color;
    };
    onMounted(() => {
      if (!wordCloudContainer.value) {
        console.error('Word cloud container is not available');
        return;
      }
      // 数据准备,为每个单词分配随机颜色,并确保数据有效性
      const data = [
        { value: 67, name: '红腹角雉' },
        { value: 98, name: '麝牛' },
        { value: 97, name: '山舌鱼' },
        { value: 100, name: '羚羊' },
        { value: 37, name: '非洲王子' },
        { value: 83, name: '麋鹿' },
        { value: 60, name: '中华鲟' },
        { value: 42, name: '鮪鱼' },
        { value: 96, name: '射水鱼' },
        { value: 54, name: '果子狸' },
        { value: 33, name: '小春鱼' },
        { value: 84, name: '水獭' },
        { value: 86, name: '刺猬' }
      ].map(item => {
        if (!item || typeof item !== 'object' || !('name' in item) || !('value' in item)) {
          console.error('Invalid data item:', item);
          return null;
        }
        return { ...item, color: getRandomColor() };
      }).filter(Boolean); // 移除无效的数据项
      // 创建词云图
      const wordCloud = new WordCloud(wordCloudContainer.value, {
        data,
        wordField: 'name',
        weightField: 'value',
        sizeRange: [12, 60],
        // 直接使用数据中的 color 字段作为颜色配置
        colorField: 'color', // 指定颜色字段
        shape: 'circle',
        wordStyle: {
          fontFamily: 'Verdana',
          fontWeight: 'bold',
        },
        // 其他配置
      });
      wordCloud.render();
    });
    return {
      wordCloudContainer,
    };
  },
};
</script>
<style scoped>
/* 你可以在这里添加组件的样式 */
</style>

使用页面

<template>
  <div id="app">
    <WordCloudComponent />
  </div>
</template>
<script>
import WordCloudComponent from '@/components/pop.vue';
export default {
  name: 'App',
  components: {
    WordCloudComponent,
  },
};
</script>
<style>
/* 你可以在这里添加应用的样式 */
</style>

到此这篇关于Vue3+@antv/g2plot 生成词云图的文章就介绍到这了,更多相关Vue3 @antv/g2plot 词云图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中引入mousewheel事件及兼容性处理方式

    vue中引入mousewheel事件及兼容性处理方式

    这篇文章主要介绍了vue中引入mousewheel事件及兼容性处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • vue.js父子组件传参的原理与实现方法

    vue.js父子组件传参的原理与实现方法

    这篇文章主要介绍了vue.js父子组件传参的原理与实现方法,结合实例形式分析了vue.js父子组件传参的基本原理、实现方法与相关操作注意事项,需要的朋友可以参考下
    2023-04-04
  • vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法

    vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法

    这篇文章主要介绍了vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • elementUI select组件value值注意事项详解

    elementUI select组件value值注意事项详解

    这篇文章主要介绍了elementUI select组件value值注意事项详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Vue配置marked链接添加target=

    Vue配置marked链接添加target="_blank"的方法

    这篇文章主要介绍了Vue配置marked链接添加target="_blank"的方法,文中给大家提到了vue实现类似target="_blank"打开新窗口的代码,感兴趣的朋友参考下吧
    2019-07-07
  • 从零开始封装自己的自定义Vue组件

    从零开始封装自己的自定义Vue组件

    如何封装自己的Vue组件,如何把自己的Vue代码封装成公共组件,今天为大家简单介绍一下如何封装自己的Vue组件
    2018-10-10
  • Vue中key为index和id的区别示例详解

    Vue中key为index和id的区别示例详解

    这篇文章主要介绍了Vue中key为index和id的区别详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • vue2如何使用simple-keyboard软键盘有中文(拼音)

    vue2如何使用simple-keyboard软键盘有中文(拼音)

    这篇文章主要介绍了vue2如何使用simple-keyboard软键盘有中文(拼音),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 优化Vue中date format的性能详解

    优化Vue中date format的性能详解

    这篇文章主要介绍了优化Vue中date format的性能详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • vue中@click绑定事件点击不生效的原因及解决方案

    vue中@click绑定事件点击不生效的原因及解决方案

    根据Vue2.0官方文档关于父子组件通讯的原则,父组件通过prop传递数据给子组件,子组件触发事件给父组件,这篇文章主要介绍了vue中@click绑定事件点击不生效的解决方案,需要的朋友可以参考下
    2022-12-12

最新评论