Echarts—词云库(echarts-wordcloud)配置详解和使用(可自定义形状)

news2025/2/12 18:16:50

词云库的详解

  • 前言
  • 安装
  • 基本配置详解
  • 具体使用步骤(Vue为例)
  • 自定义展示形状

前言

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

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

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

安装

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

“echarts”: “^5.3.3”,
“echarts-wordcloud”: “^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('myEchart4')
           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},
                    {name: "电视",value: 525},
                    {name: "Lover Boy",value: 520},
                    {name: "动漫",value: 450},
                    {name: "音乐",value: 253},
                    {name: "直播",value: 363},
                    {name: "广播电台",value: 286},
                    {name: "路飞",value: 550},
                    {name: "海贼王",value: 490},
                    {name: "女帝",value: 763},
                    {name: "索隆",value: 486},
                    {name: "漩涡鸣人",value: 680},
                    {name: "佐助",value: 550},
                    {name: "直播",value: 163},
                    {name: "广播电台",value: 86},
                    {name: "戏曲曲艺",value: 117},
                    {name: "演出票务",value: 58},
                    {name: "直播",value: 263},
                    {name: "广播电台",value: 186},
                    {name: "戏曲曲艺",value: 173},
                    {name: "演出票",value:499},
                    {name: "直播",value: 163},
                    {name: "广播电台",value: 186},
                    {name: "戏曲艺",value: 175},
                    {name: "演票务",value:199},
                    {name: "广播台",value: 86},
                    {name: "戏曲曲艺",value: 117},
                    {name: "演出",value: 58},
                    {name: "直播",value: 263},
                    {name: "广播电台",value: 186},
                    {name: "戏曲",value: 173},
                    {name: "演出务",value:195},
                    {name: "直播",value: 163},
                    {name: "广电台",value: 86},
                    {name: "戏艺",value: 175},
                    {name: "票务",value:29},
                    {name: "戏曲艺",value: 175},
                    {name: "大数据",value:199},
                    {name: "广播台",value: 86},
                    {name: "李超",value: 800},
                    {name: "喜欢",value: 158},
                    {name: "直播",value: 263},
                    {name: "ABOUT",value: 186},
                    {name: "c++",value: 173},
                    {name: "前端开发",value:195},
                    {name: "SDF",value: 163},
                    {name: "SUPERMAN",value: 86},
                    {name: "后端",value: 175},
                    {name: "大数据",value:29}
                ]
            }]

           }
           option && 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.效果图如下
在这里插入图片描述
这样就可以了,你也可以试试,赶紧收藏起来,留着备用吧,哈哈!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux脚本篇】Linux循环语句-while

目录 &#x1f341;while的语法格式 &#x1f341;while循环案例 &#x1f343;案例一&#xff1a;输出10-1的降序 &#x1f343;案例二&#xff1a;输出10的升序和降序 &#x1f343;案例三&#xff1a;批量创建用户 &#x1f341;内置跳出循环 &#x1f343;案例一&#xff1…

火山引擎 DataLeap:一个易用、高效的数据目录,是如何搭建的?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 企业如何找到数据、了解数据以及使用数据&#xff1f; 这离不开数据目录的能力。数据目录有着类似于“字典”的作用&#xff0c;能够帮助数据生产者和使用者快速定位…

ESXI 环境搭建和配置

ESXI 环境搭建和配置 ESXI简介 ESXi专为运行虚拟机、最大限度降低配置要求和简化部署而设计。只需几分钟时间&#xff0c;客户便可完成从安装到运行虚拟机的全过程&#xff0c;特别是在下载并安装预配置虚拟设备的时候。 在VMware Virtual Appliance Marketplace 上有800多款…

RabbitMQ 安装

目录 一、安装RabbitMQ1、Linux 安装⑴、官网rpm包安装①、下载rpm安装包官网下载erlangrabbitmq packagecloud下载erlangrabbitmq ②、安装 erlang③、安装rabbitmq ⑵、packagecloud快速安装⑶、添加用户账号及权限并登陆⑷、卸载erlang与rabbitmq卸载rabbitmq卸载erlang 2、…

积聚产业发展新动能|2023开放原子全球开源峰会OpenAtom OpenHarmony分论坛成功举办

6 月 12 日&#xff0c;以“OpenHarmony 共建开放&#xff0c;共享未来”为主题的 2023 开放原子全球开源峰会 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;分论坛在北京北人亦创国际会展中心第一报告厅圆满落幕。开放原子开源基金会理事长孙文龙、华…

【mongoDB数据库基本操作】

mongoDB 基本命令使用 mongoDB数据库基本操作1、连接/创建数据库3、查看数据库4、删除数据库 表的基本操作1、创建表2、删除表3、查询表4、更新表删除表中的记录 mongoDB数据库基本操作 连接mongoDb服务器 进入到mongoDb安装目录 cd /data/mongodb/bin 使用./mongo连接到本…

为什么你的领导,总是挑刺,要求你要有自己的思考?

为什么你的领导&#xff0c;总是挑刺&#xff0c;要求你要有自己的思考&#xff1f; 如何思考&#xff1f;其实有方法论和框架&#xff0c;照这做&#xff0c;也能提升自己的思考能力和维度。 尴尬的问题 在职场的给位是否遇到过这种情况。领导在开完一次沟通会&#xff0c;或…

公元前后的王莽与屋大维

公元元年前后&#xff0c;地球的两端同时产生了两个辉煌的大国&#xff0c;z国和罗马。 我国经历了漫长而又松散的分封制后&#xff0c;在秦帝国时期实现了大一统&#xff0c;在那个时代&#xff0c;因为分封制有效的管理半径最多也就是500公里左右&#xff0c;所以非常不适合…

牛客网1658 页的 Java 岗面试突击手册,GitHub已下载量已过百万

不得不说程序员除了做项目之外&#xff0c;提升自己技能最快的方式就是【看书&#xff01;】和【刷题&#xff01;】&#xff0c;这里说的刷题不是无脑刷&#xff0c;而是要明白面试官为什么会问这个问题&#xff0c;以及这个问题的意义在哪里&#xff01; 今天带来的是全新升…

Beyond Compare 4 正版激活码 -变化是不可避免的,因此,请使用最好的工具对其进行管理。

Beyond Compare 是开发人员、系统管理员和其他人用来比较、合并和同步数据的软件应用程序。它可以在Windows&#xff0c;macOS和Linux上运行。 功能特点 比较文件夹、文件 一、随时随地访问数据 Beyond Compare 是敏捷的。 我们的虚拟文件系统以透明的方式将您连接到您的数据…

Stable Diffusion实操示例

一、负向提示词 解决问题&#xff1a;生成的图片存在瑕疵&#xff0c;比如多只眼睛、多只手指等情况。通过embeddings可以将避免一些常用的不好结果。 方法&#xff1a;从https://civitai.com/?utm_sourcenettsz.com 中下载负向提示词的embeddings模型&#xff0c; EasyNeg…

SOLIDWORKS 2023修复遗漏配合参考及装配体磁力配合

1、修复遗漏的配合参考 ① 为面、边线、平面、轴和点的参考修复遗漏的配合参考 ② 位于与遗漏的参考相同的位置和方向的零部件上选择参考&#xff0c;可修复零 部件遗漏的参考 ③ 包含多个遗漏的配合参考的模型&#xff0c;右键单击配合 文件夹&#xff0c;然后单击自动修复…

AI Expo 2023 | 图技术激活数据资产主题论坛线下报名限时开放!

洞察关联数据 创造无限可能 图技术激活数据资产主题论坛 将于2023年6月25日在苏州召开。 大会背景 本次图技术激活数据资产论坛&#xff0c;由苏州市大数据服务中心协会主办、浙江创邻科技有限公司承办&#xff0c;苏州市计算机学会、苏州市大数据和人工智能产业联盟协办&…

(五) ElasticSearch 数据类型和文档CRUD操作

1.ES数据类型 官方文档地址&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_complex_datatypes 核心数据类型&#xff08;Core Data Types&#xff09;&#xff1a; 核心数据类型是 Elasticsearch 最基本和常用的数据类型…

DataX 3.0 在Windows下基于MySQL做数据迁移示例

在 Windows 安装 Datax&#xff1a; Datax 官网&#xff1a;https://github.com/alibaba/DataX 环境要求&#xff1a; 1&#xff1a;JDK&#xff08;1.8以上&#xff0c;推荐1.8&#xff0c;并配置好环境变量&#xff09; 2&#xff1a;Python&#xff08;网上推荐Python2.…

Java线程的同步机制(synchronized关键字)

线程的同步机制(synchronized ) 1.背景 例子&#xff1a;创建个窗口卖票&#xff0c;总票数为100张.使用实现Runnable接口的方式 * 1.问题&#xff1a;卖票过程中&#xff0c;出现了重票、错票 -->出现了线程的安全问题2.问题出现的原因&#xff1a;当某个线程操作车票的过…

罗马不是一天建成的,那为什么建了那么多罗马?

这一个罗马&#xff0c;那一个罗马&#xff0c;东一个罗马&#xff0c;西一个罗马&#xff0c;世界历史的大半部分都在跟罗马打交道。更要命的是四大文明古国还没有古代罗马。 存在感这么强&#xff0c;还不是四大文明古国&#xff0c;名字还难记&#xff0c;公元前居然就有共…

P19[6-7]编码器接口(硬)

编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减,(初始化后CNT=0;编码器右转,产生一个脉冲,CNT++,左转,产生一个脉冲,CNT--)。相当于外部时钟,同时控制CNT计数方向和计数时钟。每隔一段时间取CNT的值,再把CNT清零,就表示编码器的速度。 编码器测速即测频法…

总结linux查看当前用户的方法

操作环境&#xff1a;ubuntu 18.04系统 一、查看当前用户 1、shell终端中输入&#xff1a;who 当前用户为&#xff1a;root&#xff0c;使用pts的终端&#xff0c;后面是登陆的时间 2、shell终端中输入&#xff1a;whoami 当前用户为&#xff1a;root&#xff0c;很精简输出结果…

SpringBoot - spring-boot-maven-plugin插件介绍

简述 这个是SpringBoot的MAVEN插件&#xff0c;主要用来打包的&#xff0c;通常用来将项目打包成JAR或者WAR文件&#xff08;生成FAT 包&#xff09;。 这个插件生成的包是可执行的JAR。 Spring Boot Maven Plugin Documentation&#xff1a;https://docs.spring.io/spring-boo…