本文介绍: 我们经常会看到一些网站或者页面有一堆五颜六色的词汇的聚在一块,有大有小的散落着,看着挺好看的;也许项目中也会涉及到显示一些关键词之类的需求,这个时候也可以词云库echartswordcloud)来实现echartswordcloud基于echarts一个词云库,但是在echart官网中的配置相中却没有关于他的介绍,下面我们就来一起慢慢探索并能手到擒来的使用它;1.下载图片首先要找到一张图片,为了成功率较高,随意对图片也是有要求的,图片一定要是矢量图,并且最好为黑色填充,当然其他颜色也行。

前言

我们经常会看到一些网站或者页面有一堆五颜六色的词汇的聚在一块,有大有小的散落着,看着挺好看的;

也许项目中也会涉及到显示一些关键词之类的需求,这个时候也可以词云库echartswordcloud)来实现

echartswordcloud基于echarts一个词云库,但是在echart官网中的配置相中却没有关于他的介绍,下面我们就来一起慢慢探索并能手到擒来的使用它;

安装

上面说了,echartswordcloud基于echarts一个插件,所以我们要首先安装echarts包,然后安装echartswordcloud的包,这里我的练习项目安装版本;当然,你可以随意安装需要版本

echarts”: “^5.3.3”,
echartswordcloud”: “^2.0.0”,

npm install echarts@5.3.3
npm install echarts-wordcloud@2.0.0

基本配置详解

词库云的使用方式其实跟echart组件是一样的,也是首先需要一个容器然后对其进行配置,我们先来看一下他的一下配置项,最后我们再把详细的使用方法以及代码展示出来;

echarts-wordcloud官方github地址

var chart = echarts.init(document.getElementById('main'));

chart.setOption({
    ...
    series: [{
        type: 'wordCloud',
        
        /*要绘制的“云”的形状。可以是为回调函数,或一个关键字。
        可用的形状有(circle)圆形(默认)、(cardioid)心形,(diamond)菱形,(triangle-forward)三角形向前,(triangle)三角形,(pentagon)五边形和(star)星形。*/
        shape: 'circle',
        
        //保持maskImage宽高比或1:1的形状,他的选项支持echarts-wordcloud@2.1.0
        keepAspect: false,

        //一个轮廓图像,其白色区域将被排除在绘制文本之外
        //意思就是可以通过图片,来自定义词云的形状
        maskImage: maskImage,

       //设置显示区域的位置以及大小
        left: 'center',
        top: 'center',
        right: null,
        bottom: null,
        width: '70%',
        height: '80%',
 
        //数据中的值将映射到的文本大小范围默认大小最小12px最大60px
        sizeRange: [12, 60],

       //文本旋转范围和步进度文本通过rotationStep:45在[- 90,90]范围随机旋转
        rotationRange: [-90, 90],
        rotationStep: 45,

		//以像素单位网格大小用于标记画布可用性
		//网格尺寸越大,单词之间的间距越大。
        gridSize: 8,

         //设置true,允许文字部分在画布绘制
        //允许绘制大于画布大小的单词
        //从echarts-wordcloud@2.1.0开始支持选项
        drawOutOfBound: false,

        //如果字体太大而无法显示文本
        //是否收缩文本。如果将其设置false,则文本将不渲染。如果设置true,则文本将被缩小。
        //从echarts-wordcloud@2.1.0开始支持此选项
        shrinkToFit: false,

        // 执行布局动画。当有大量的单词时,关闭它会导致UI阻塞
        layoutAnimation: true,

        //全局文本样式
        textStyle: {
            fontFamily: 'sans-serif',
            fontWeight: 'bold',
            // Color可以一个回调函数或一个颜色字符串
            color: function () {
                // Random color
                return 'rgb(' + [
                    Math.round(Math.random() * 160),
                    Math.round(Math.random() * 160),
                    Math.round(Math.random() * 160)
                ].join(',') + ')';
            }
        },
        emphasis: {
            focus: 'self',

            textStyle: {
                textShadowBlur: 10,
                textShadowColor: '#333'
            }
        },

       //数据是一个数组。每个数组项必须具有名称和值属性
        data: [
	        {
	            name: 'Farrah Abraham',
	            value: 366,
	            //单个文本的样式
	            textStyle: {}
	        }
        ]
    }]
});

具体使用步骤(Vue为例)

1.首先在项目引入

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

2.在需要使用词库云的组件写一个div容器

<div id="myEchart"></div>

3.设置配置项

export default {
    mounted(){
       this. initEchart()
    },
    methods:{
        initEchart(){
           const echartDom = document.getElementById('myEchart')
           const myChart = echarts.init(echartDom)
           const option  = {
                series: [{
                type: 'wordCloud',
                shape: 'circle',
                keepAspect: false,
               // maskImage: maskImage,
                left: 'center',
                top: 'center',
                width: '100%',
                height: '90%',
                right: null,
                bottom: null,
                sizeRange: [12, 60],
                rotationRange: [-90, 90],
                rotationStep: 45,
                gridSize: 8,
                drawOutOfBound: false,
                layoutAnimation: true,
                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(',') + ')';
                    }
                },
                emphasis: {
                    // focus: 'self',
                    textStyle: {
                        textShadowBlur: 3,
                        textShadowColor: '#333'
                    }
                },
                //data属性中的value值却大,权重就却大,展示字体就却大
                data: [
                    {name: 'Farrah',value: 366},
                    {name: "汽车",value: 900},
                    {name: "视频",value: 606},
                    ...
                ]
            }]

           }
           option &amp;&amp; myChart.setOption(option)

           //随着屏幕大小调节图表
            window.addEventListener("resize", () => {
                myChart.resize();
            });
        }
    }
}

4.效果图展示
在这里插入图片描述

自定义展示形状

1.下载图片
首先要找到一张图片,为了成功率较高,随意对图片也是有要求的,图片一定要是矢量图,并且最好为黑色填充,当然其他颜色也行;

大家推荐一个可以获取图片的网站,阿里iconfont图标库

这里,我下载了一个心形的png图片,如下图
在这里插入图片描述
2.转化图片为base64
我们不能直接使用图片,需要把图片转成base64,这里大家推荐一个免费转换网址Base64图片转换

在这里插入图片描述

图片上传后,右侧自动生成base64格式链接然后链接复制保存起来,备用;

在这里插入图片描述
3.修改配置项
项目中使用,跟上面的方法一样,不一样的就是添加image属性

export default {
  data(){
        return{
           image:"data:image/png;base64,..."
        }

    },
    mounted(){
        this. initEchart()
    },
    methods:{
        
        initEchart(){
           const echartDom = document.getElementById('myEchart5')
           const myChart = echarts.init(echartDom)
           var options
           var maskImage = new Image();
            maskImage.src = this.image
         
           options = {
                series: [{
                type: 'wordCloud',
                shape: 'circle',
                keepAspect: false,
                //此处添加图片的base64格式
                maskImage: maskImage,
                left: 'center',
                top: '-15px',
                width: '98%',
                height: '100%',
                right: null,
                bottom: null,
                sizeRange: [18, 60],
                rotationRange: [-90, 90],
                rotationStep: 45,
                gridSize: 8,
                drawOutOfBound: false,
                layoutAnimation: true,
                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(',') + ')';
                    }
                },
                emphasis: {
                    // focus: 'self',
                    textStyle: {
                        textShadowBlur: 5,
                        textShadowColor: '#333'
                    }
                },
                data:[
	                {name: 'Far',value: 10},
	                {name: "汽车",value: 2},
	                {name: "视频",value: 3},
	                ... 
	           ], 
            }]
           }

           myChart.setOption(options)

           //随着屏幕大小调节图表
            window.addEventListener("resize", () => {
                myChart.resize();
            });
        }
    }
}

4.效果图如下
在这里插入图片描述
这样就可以了,你也可以试试,赶紧收藏起来,留着备用吧,哈哈!

原文地址:https://blog.csdn.net/qq_44182284/article/details/131202955

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_16929.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注