使用echarts生成各种形状的词云图

使用echarts生成各种形状的词云图

目前我是使用vue.js组件进行开发的,最近在做项目的时候,遇到了一个瓶颈。需要做一个词云图,并且词云只能是在一个人物里展现的。百度了很多画这种东西的方式,最终发现还是使用echarts的echarts-wordcloud插件进行绘制是最简洁方便的了,对于前端来说。

例如做这个词云图~
在这里插入图片描述

使用如下~~~~

一、引入词云插件

因为词云插件是基于echarts的,所以需要先引入echarts再引入词云插件。
1、使用npm命令引入

npm install echarts
npm install echarts-wordcloud

2、在页面中进行引入

import * as echarts from 'echarts';
import 'echarts-wordcloud';

二、前提准备

  1. 让词云按一定形状展示,这里实际上就是使用的一张背景图,使得它会按照图片除白色地方进行展示。一般就是使用黑白图片,黑色是展示词云的地方,其它地方白色即可。
    例如这种图片
    请添加图片描述
  2. 有时候会出现词云展示很少的情况,则需要词云上再放一层图,防止数据只展示太少的一部分。只要把轮廓内弄成透明,加一条轮廓边即可。
    例如下面图片
    请添加图片描述

三、使用示例

<template>
    <div id="wordColund" style="height:280px;width:280px" v-if="keywordsList.length>0" ></div>
</template>

<script>
import * as echarts from 'echarts'
import 'echarts-wordcloud';
import cy from "@/assets/cy.png"
import wordColundBG from "@/assets/wordColundBG.png"
const maskImage = new Image();
const keywordsList = [];
const option = {
    backgroundColor: '#fff',
        // xAxis、yAxis这个配置主要是针对  pictorialBar 这个类型使用的
        xAxis: {
            axisLine: {show: false},
            axisLabel: {show: false},
            axisTick: {show: false},
            splitLine: {show: false},
        },
        yAxis: {
            data: [0 , 900],
            show: false
        },
        grid: { //调整位置结合透明图
            top: '-50',
            left:'-70',
            height: 780
        },
        series: [
            {
                name: '',
                type: 'wordCloud',
                sizeRange: [8, 60],//字体尺寸范围
                rotationRange: [-30,30], //旋转角度 0, 0
                // shape: 'circle',
                maskImage: maskImage, //是否使用背景图进行勾勒
                textPadding: 0,
                gridSize: 0, //词间距 7
                width: '100%' , 
                height: 280 , 
                left: 'center',
                top: 'center',
                drawOutOfBound: false,//溢出是否显示
                // 布局的时候是否有动画
                layoutAnimation: true,
                autoSize: {
                    enable: true,
                    minSize: 4
                },
                textStyle: {
                        fontFamily: 'Arial',
                        color: function () {
                            return 'rgb(' + [
                                Math.round(Math.random() * 160),
                                Math.round(Math.random() * 160),
                                Math.round(Math.random() * 160)
                            ].join(',') + ')';
                        },
                },          
                data: keywordsList
            },
            // 词云上再放一层透明层,防止数据只展示太少的一部分。
            {
                name: '',
                type: 'pictorialBar',//象形图,可用背景图代替
                // symbol: 'image://' + wordColundBG,
                symbolSize: ['80%', 280],  // 图片的宽、高
                symbolRepeat: false, // 复制
                data:  [{value: 1 , symbolOffset: ['32%' , '-140%'] }],//调整位置
                animation:false,
            },
        ]
}
export default {
    name: 'EchartsWordCloud',
    data() {
      return {
        cy,
        wordColundBG,
        option:option,
        maskImage,
        keywordsList,
      };
    },
     mounted(){
      this.init();
    //   this.init2();
    },
    methods: {
    async init () { 
       // let {data} = await myPortait();   
        this.keywordsList = [
            {
                name:"输出",
                value:34156
            },
            {
                name:"测评",
                value:22199
            },
            {
                name:"微控制器",
                value:10288
            },
            {
                name:"线网络",
                value:1206
            },
            {
                name:"机台",
                value:274470
            },
            {
                name:"无线",
                value:12311
            },
            {
                name:"输",
                value:2062
            },
            {
                name:"开端",
                value:4885
            },
            {
                name:"端",
                value:32294
            },
            {
                name:"换机器",
                value:18574
            },
            {
                name:"测评1",
                value:38929
            },
            {
                name:"模块",
                value:969
            },
            {
                name:"机",
                value:37517
            },
            {
                name:"接",
                value:12053
            },
            {
                name:"机器",
                value:57299
            },
            {
                name:"牛逼",
                value:15418
            },
            {
                name:"你好",
                value:22905
            },
            {
                name:"世界",
                value:5146
            },
            {
                name:"我",
                value:49487
            },
            {
                name:"是",
                value:33837
            },
            {
                name:"小世界",
                value:4500
            },
            {
                name:"大世界",
                value:5744
            },
            {
                name:"前端",
                value:4840
            },
            {
                name:"后端",
                value:2322
            },
        ];
        this.option.series[0].data = this.keywordsList;
        this.maskImage.src = this.cy;//第一张图片
        this.option.series[0].maskImage = this.maskImage;     
        this.option.series[1].symbol = 'image://' + this.wordColundBG;//第二张图片
        
        this.$nextTick(() => {        
        setTimeout(()=>{
            const myChart = echarts.init(document.getElementById('wordColund'));
            myChart.setOption(this.option);
            this.maskImage.onload = ()=> {
                myChart.setOption(this.option);
            };  
            window.onresize = function() {
                myChart.resize();
            };
        })
        })
    },
}
}
</script>

展示结果:
在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,生成小鸟形状词云图需要借助ECharts的图形绘制和词云插件。以下是一些基本的步骤: 1. 引入ECharts和词云插件 首先需要在页面中引入ECharts和词云插件的js文件,可以通过CDN、本地文件引入等方式进行。 2. 准备数据 需要准备一个数据数组,包含每个词语及其对应的权重值。可以通过ajax请求后端接口获取数据,也可以手动编写一个json文件。 3. 设置ECharts配置项 需要设置ECharts的配置项,包括图表类型、画布大小、背景颜色、字体样式等等。其中,需要使用词云插件提供的shape为bird的图形作为词云的形状。 4. 渲染图表 通过ECharts提供的实例化对象和setOption方法,将数据和配置项传入,进行图表的渲染。 以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>小鸟形状词云图</title> <!-- 引入ECharts和词云插件 --> <script src="https://cdn.jsdelivr.net/npm/echarts@5.1.0/dist/echarts.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/echarts-wordcloud@2.0.2/dist/echarts-wordcloud.min.js"></script> </head> <body> <div id="myChart" style="width: 600px;height: 400px;"></div> <script> // 准备数据 var data = [ { name: '小鸟', value: 100 }, { name: '文具', value: 80 }, { name: '书包', value: 70 }, { name: '笔记本', value: 60 }, { name: '铅笔', value: 50 }, { name: '橡皮', value: 40 }, { name: '尺子', value: 30 }, { name: '圆规', value: 20 }, { name: '卷笔刀', value: 10 } ]; // 设置ECharts配置项 var option = { series: [{ type: 'wordCloud', gridSize: 8, sizeRange: [12, 50], rotationRange: [-45, 90], shape: 'bird', textStyle: { normal: { color: function() { return 'rgb(' + [ Math.round(Math.random() * 160), Math.round(Math.random() * 160), Math.round(Math.random() * 160) ].join(',') + ')'; } } }, data: data }] }; // 渲染图表 var myChart = echarts.init(document.getElementById('myChart')); myChart.setOption(option); </script> </body> </html> ``` 以上代码中,我们使用ECharts提供的wordCloud类型,设置了词云的形状为bird,同时根据权重值设置了每个词语的大小、颜色等。您可以根据需要进行修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值