Echarts词云图(echarts-wordcloud)使用详解,自定义图案

前言

工作中看到了一个一堆五颜六色的词汇堆积在一块跟云朵似的,看着挺好看的,突发奇想就要试试这种怎么做,然后就寻到了方法。

使用echarts搭配echarts-wordcloud库实现词云图

具体使用步骤(Vue3)

1.首先安装echarts包,然后再安装echarts-wordcloud的包
 

npm install echarts

npm install echarts-wordcloud

2.在项目中引入

import * as echarts from "echarts"

import 'echarts-wordcloud'

3.写一个div容器

 <div id="container" class="wordcloud-wrapper"></div>

4.配置项

<script setup lang="ts">

import * as echarts from "echarts"

import 'echarts-wordcloud'

import { ref,onMounted} from "vue"

 // 词汇数据

  const fruits = ref([
    { name: '互联网服务', value: 1000 },
    { name: '交通运输', value: 850 },
    { name: '公司', value: 800 },
    { name: '军工', value: 600 },
    { name: '医药', value: 900 },
    { name: '商务服务', value: 600 },
    { name: '城乡规划', value: 800 },
    { name: '家政服务', value: 400 },
    { name: '安防', value: 850 },
    { name: '医疗服务', value: 200 },
    { name: '电子科技', value: 8000 },
    { name: '航空航天', value: 1500 },
    { name: '食品饮料', value: 1500 },
    { name: '能源', value: 800 },
    { name: '教育培训', value: 200 },
    { name: '金融', value: 100 },
    { name: '文化娱乐', value: 250 },
    { name: '电力', value: 1200 },
    { name: '石油化工', value: 300 },
    { name: '电子商务', value: 900 },
    { name: '建筑', value: 700 },
    { name: '旅游', value: 550 },
    { name: '环保', value: 750 },
    { name: '地产', value: 1100 },
    { name: '体育', value: 300 },
    { name: '通信', value: 950 },
    { name: '科研', value: 1200 },
    { name: '物流', value: 1300 },
    { name: '咨询', value: 600 },
    { name: '游戏', value: 850 },
    { name: '人力资源', value: 500 },
    { name: '水务', value: 300 },
    { name: '舞蹈艺术', value: 150 },
    { name: '汽车制造', value: 1100 },
    { name: '电影制作', value: 350 },
    { name: '游乐园', value: 250 },
    { name: '新能源', value: 900 },
    { name: '服装设计', value: 400 },
    { name: '采矿', value: 700 },
    { name: '信息安全', value: 800 },
    { name: '化妆品', value: 600 },
    { name: '音乐产业', value: 750 },
    { name: '物联网', value: 1200 },
    { name: '绿色建筑', value: 850 },
    { name: '社交媒体', value: 950 },
    { name: '人工智能', value: 1000 },
    { name: '水产养殖', value: 320 },
    { name: '医学研究', value: 1800 },
    { name: '动物保护', value: 130 },
    { name: '航海', value: 1000 }
    ]);

function initCharts(){

    const chart = echarts.init(document.getElementById('container') as HTMLDivElement);

    chart.setOption( {

    title: {

        text: '',

        link: 'http://www.google.com/trends/hottrends'

    },

    tooltip: {

        show: true

    },

       grid: {

            left: '5%',

            right: '5%',

            bottom: '5%',

            top: '5%',

            containLabel: true

        },

    series: [{

            type: 'wordCloud',

            gridSize: 8, // 控制词云图的网格大小,值越大词语之间的间距越大

            sizeRange: [10, 80], // 控制词语的大小范围

            rotationRange: [0, 0], // 控制词语的旋转角度范围

            rotationStep: 45, // 控制词语旋转的步长

            shape: 'circle', // 控制词云图的形状,可选值为 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star'

            drawOutOfBound: false, // 控制词云图是否允许词语超出绘制区域

            // 布局的时候是否有动画

            layoutAnimation: true,

            // 图的位置

            left: 'center',

            top: 'center',

            textStyle: {

                    fontFamily: 'sans-serif',

                    // fontWeight: 'bold',

                    color: function () {

                        return 'rgb(' + [

                            Math.round(Math.random() * 160),

                            Math.round(Math.random() * 160),

                            Math.round(Math.random() * 160)

                        ].join(',') + ')';

                    }

                },  

        data: fruits,

        emphasis: {

                focus: 'self',

                textStyle: {

                    fontSize: 20 // 点击的词放大

                }

            }

    }]

}),

    // 添加词的点击事件处理函数

    chart.on('click', function () {

    });

    // 监听词云图中词语的鼠标移入事件

    chart.on('mouseover', function () {

    });

}

onMounted(() => {

    initCharts()

    })

</script>

5.效果图展示

自定义展示形状

1.下载图片
首先需要下载一个矢量图,尽量为黑色填充;可以在阿里iconfont图标库下载;

我下载了一个五角星的png图片,如下图

2.转化图片为base64

需要把图片转成base64,可以使用Base64图片转换 免费转换

3.添加配置项

跟上述方法一样 多了一个maskImage属性

<script setup lang="ts">

import * as echarts from "echarts"

import 'echarts-wordcloud'

import { ref,onMounted} from "vue"

 // 词汇数据

   const fruits = ref([
    { name: '互联网服务', value: 1000 },
    { name: '交通运输', value: 850 },
    { name: '公司', value: 800 },
    { name: '军工', value: 600 },
    { name: '医药', value: 900 },
    { name: '商务服务', value: 600 },
    { name: '城乡规划', value: 800 },
    { name: '家政服务', value: 400 },
    { name: '安防', value: 850 },
    { name: '医疗服务', value: 200 },
    { name: '电子科技', value: 8000 },
    { name: '航空航天', value: 1500 },
    { name: '食品饮料', value: 1500 },
    { name: '能源', value: 800 },
    { name: '教育培训', value: 200 },
    { name: '金融', value: 100 },
    { name: '文化娱乐', value: 250 },
    { name: '电力', value: 1200 },
    { name: '石油化工', value: 300 },
    { name: '电子商务', value: 900 },
    { name: '建筑', value: 700 },
    { name: '旅游', value: 550 },
    { name: '环保', value: 750 },
    { name: '地产', value: 1100 },
    { name: '体育', value: 300 },
    { name: '通信', value: 950 },
    { name: '科研', value: 1200 },
    { name: '物流', value: 1300 },
    { name: '咨询', value: 600 },
    { name: '游戏', value: 850 },
    { name: '人力资源', value: 500 },
    { name: '水务', value: 300 },
    { name: '舞蹈艺术', value: 150 },
    { name: '汽车制造', value: 1100 },
    { name: '电影制作', value: 350 },
    { name: '游乐园', value: 250 },
    { name: '新能源', value: 900 },
    { name: '服装设计', value: 400 },
    { name: '采矿', value: 700 },
    { name: '信息安全', value: 800 },
    { name: '化妆品', value: 600 },
    { name: '音乐产业', value: 750 },
    { name: '物联网', value: 1200 },
    { name: '绿色建筑', value: 850 },
    { name: '社交媒体', value: 950 },
    { name: '人工智能', value: 1000 },
    { name: '水产养殖', value: 320 },
    { name: '医学研究', value: 1800 },
    { name: '动物保护', value: 130 },
    { name: '航海', value: 1000 }
    ]);

function initCharts(){

    const chart = echarts.init(document.getElementById('container') as HTMLDivElement);

    var maskImage = new Image();

     maskImage.src = 'data:image/png;base64,iVBORw...'

    chart.setOption( {

    title: {

        text: '',

        link: 'http://www.google.com/trends/hottrends'

    },

    tooltip: {

        show: true

    },

       grid: {

            left: '5%',

            right: '5%',

            bottom: '5%',

            top: '5%',

            containLabel: true

        },

    series: [{

            type: 'wordCloud',

           maskImage: maskImage, //自定义形状

            gridSize: 8, // 控制词云图的网格大小,值越大词语之间的间距越大

            sizeRange: [10, 80], // 控制词语的大小范围

            rotationRange: [0, 0], // 控制词语的旋转角度范围

            rotationStep: 45, // 控制词语旋转的步长

            shape: 'circle', // 控制词云图的形状,可选值为 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star'

            drawOutOfBound: false, // 控制词云图是否允许词语超出绘制区域

            // 布局的时候是否有动画

            layoutAnimation: true,

            // 图的位置

            left: 'center',

            top: 'center',
           // 词汇样式

            textStyle: {

                    fontFamily: 'sans-serif',

                    // fontWeight: 'bold',

                    color: function () {

                        return 'rgb(' + [

                            Math.round(Math.random() * 160),

                            Math.round(Math.random() * 160),

                            Math.round(Math.random() * 160)

                        ].join(',') + ')';

                    }

                },  

        data: fruits,

        emphasis: {

                focus: 'self',

                textStyle: {

                    fontSize: 20 // 点击的词放大

                }

            }

    }]

}),

    // 添加词的点击事件处理函数

    chart.on('click', function () {

    });

    // 监听词云图中词语的鼠标移入事件

    chart.on('mouseover', function () {

    });

}

onMounted(() => {

    initCharts()

    })

</script>

4.效果如下

至此,一个漂漂亮亮的词云图就完成啦!

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
回答: 要实现echarts动态词云图,你可以使用JavaScript和CSS来编写一个2D动画效果。首先,你需要在HTML中创建一个容器来包裹词云图。然后,引入echartsecharts-wordcloud的脚本文件。接下来,你可以使用Vue或原生JavaScript来生成词云图,并让词云图动起来。你可以通过设置词云的大小、颜色和位置来实现动态效果。具体的实现步骤可以参考\[2\]和\[3\]中提供的代码示例和链接。希望这能帮到你! #### 引用[.reference_title] - *1* [使用echarts词云图](https://blog.csdn.net/qq_42092076/article/details/115767833)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [echarts实现词云图表,及参数配置详解](https://blog.csdn.net/m0_54853420/article/details/125108913)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [产品经理:你能不能让词云动起来?](https://blog.csdn.net/vergil_/article/details/120521927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值