Echarts:简单词云图实现

本文介绍如何利用ECharts的自定义图表功能实现词云图。通过创建DOM元素、设置样式、初始化ECharts实例及配置选项,最终展示了一个带有随机字体大小和颜色的词云图示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Echarts是一个开源的可视化图表库,支持丰富的图表,官网中还有大量示例可以选择使用、参考。

其中比较好玩、有趣的是词云,词云就是用关键词组成的一朵云,更广泛的定义是,由关键词组成的任意一种图案均称为词云。因此,并不仅限于云朵的形状。

Echart之前有词云这个配置,只不过现在没有了。虽然没有词云,但是echarts提供了custom配置,可以自定义图表。我们就可以自己通过配置实现词云。

首先,创建一个容器元素用来存放图表。

<div id="wordcloud"></div>

然后设置样式

<style>
	#wordcloud{
		width:500px;
		height:500px;
	}
</style>

然后,使用该元素初始化echarts

const echartsInstance = echarts.init(document.getElementById('wordcloud'));

接下来,配置配置对象,使用echarts提供的属性值为custom的type字段进行配置,在custom类型下,需要声明renderItem函数,这个函数的作用是生成针对于每一个数据所配置的图案。

它会对data中的每一项数据都执行该函数,然后在函数进行处理后返回一个图形对象,根据图形对象显示出来。

returnItem函数接收两个参数params和api
params是一个保存了基本配置信息的对象,例如:dataIndex:表示该数据在data中的索引
api是一个拥有操作数据的基本方法的对象,常用方法有value():该方法获取当前数据项的数据即value值
在这里插入图片描述

我们在renderItem中返回的是text类型的图像,该图像只显示文本,通过style对象中的text字段设置显示文本。除了显示的文本之外还可以设置字体、颜色等常见样式。

const data = [{
  name: 'hellp',
  value: 10
}, {
    name: '没有',
    value: 20
  }, {
    name: '不错',
    value: 16
  }, {
    name: '还行',
    value: 30
  }, {
    name: '屏幕',
    value: 40
  }];
const option = {
    xAxis:{
      show:false
    },
    yAxis:{
      show:false
    },
    series: [{
      type: 'custom',
      renderItem(params, api){
        const x = Math.floor(Math.random() * 500);
        const y = Math.floor(Math.random() * 500);
        const canvas = document.createElement('canvas');
        const ctx = canvas.getContext('2d');
        ctx.font = api.value(0)+'';
        const {width} =  ctx.measureText(data[params.dataIndex].name);
        return {
          type:'text',
          x:x+width,
          y,
          style:{
            text: data[params.dataIndex].name,
            fontSize:data[params.dataIndex].value
          }
        }
      },
      data: data
    }]
  };

最后,设置echartsInstance的配置

echartsInstance.setOption(option);

效果如下
在这里插入图片描述
不过,比较简陋,我们可以对配置进行补充实现更好的效果。

补充后的配置如下,我们补充随机的字体颜色,至于坐标一时不好计算,以后会持续更新,能够让其在随机的情况下保持有序。

const option = {
    xAxis:{
      show:false
    },
    yAxis:{
      show:false
    },
    series: [{
      type: 'custom',
      renderItem(params, api){
        const x = Math.floor(Math.random() * 500);
        const y = Math.floor(Math.random() * 500);
        const canvas = document.createElement('canvas');
        const ctx = canvas.getContext('2d');
        ctx.font = api.value(0)+'';
        const {width} =  ctx.measureText(data[params.dataIndex].name);
        return {
          type:'text',
          x:x+width,
          y,
          style:{
            text: data[params.dataIndex].name,
            fontSize:data[params.dataIndex].value,
            fill: `rgba(${Math.floor(Math.random() * 256)},${Math.floor(Math.random() * 256)},${Math.floor(Math.random() * 256)}, ${Math.random()})`
          }
        }
      },
      data: data
    }]
  };

效果如下

在这里插入图片描述

可以使用 echarts-wordcloud 插件来实现基于 echarts词云图。以下是一个简单的示例: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基于echarts词云图</title> <!-- 引入echarts --> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> <!-- 引入echarts-wordcloud插件 --> <script src="https://cdn.jsdelivr.net/npm/echarts-wordcloud/dist/echarts-wordcloud.min.js"></script> </head> <body> <div id="myChart" style="width: 600px; height: 400px;"></div> <script> // 初始化echarts实例 var myChart = echarts.init(document.getElementById('myChart')); // 配置项 var option = { series: [{ type: 'wordCloud', shape: 'circle', left: 'center', top: 'center', width: '80%', height: '80%', 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: [ { name: 'JavaScript', value: 10000, textStyle: { fontSize: 30 } }, { name: 'HTML', value: 8000, textStyle: { fontSize: 24 } }, { name: 'CSS', value: 6000, textStyle: { fontSize: 18 } }, { name: 'Python', value: 5000, textStyle: { fontSize: 16 } }, { name: 'Java', value: 4000, textStyle: { fontSize: 14 } }, { name: 'C++', value: 3000, textStyle: { fontSize: 12 } } ] }] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); </script> </body> </html> ``` 在这个示例中,我们引入了 echartsecharts-wordcloud 的 JavaScript 文件,并创建了一个 `div` 元素作为 echarts 图表的容器。接着,我们使用 `echarts.init` 方法初始化 echarts 实例,并使用 `option` 对象配置了词云图的样式、字体、数据等属性。最后,使用 `myChart.setOption` 方法将配置项应用到 echarts 实例中并显示图表。 你可以根据自己的需求修改配置项,例如调整词云图的大小、形状、字体、数据等。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端御书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值