欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue中使用词云图的实现示例

程序员文章站 2022-01-06 07:48:19
在vue中, 查找到有两种方法来实现词云图, 分别是echarts 和 highchartsecharts:注意,wordcloud对应的echarts版本有要求:echarts-wordcloud@...

在vue中, 查找到有两种方法来实现词云图, 分别是echarts 和 highcharts

echarts:

注意,wordcloud对应的echarts版本有要求:echarts-wordcloud@2 is for echarts@5 echarts-wordcloud@1 is for echarts@4

需要下载echartsjs 和 wordcloud, 全局注册引用echarts

	npm install echarts@5
	npm install echarts-wordcloud@2
<div class="cloud-wrap">
    <div ref="cloudel" class="cloud-box"></div>
</div>
<style>
.cloud-wrap {
    width: 100%;
    height: 100%;
}
 .cloud-box {
     width: 100%;
     height: 100%;
 }
</style>
<script>
import wordcloud from 'echarts-wordcloud';
export default {
	data() {
		return {
			words:[{
				id:1,
				content:'name'
			}],
			bgimg:'base64格式, 底色为白色', 
		}
	},
	mounted() {
      this.drawcloud(this.$refs.cloudel, this.words);
  	},
  	methods:{
	  	drawcloud(wrapel, data) {
	        // let maskimage = new image(); //可以根据图片形状生成有形状的词云图
	        // maskimage.src= this.bgimg;
	        let list = this.wordclouddata.map((item) => ({
	            name: item.content,
	            value: item.id
	        }))
	        if(list.length == 0){
	            list = [{name:'无',value:50}]
	        }
	        let mychart = echarts.init(wrapel);
	        let option = 
	        {
	            tooltip: {
	                show: true,
	            },
	            // backgroundcolor:'#fff', // 画布背景色
	            series: [
	            {
	                name: "热词",
	                type: "wordcloud",
	                // maskimage: maskimage, // 图片形状
	                keepaspect: false,
	                sizerange: [10, 40], //画布范围,如果设置太大会出现少词(溢出屏幕)
	                rotationrange: [0, 0], //数据翻转范围
	                // shape: "circle",
	                // drawoutofbound: true, // 超出画布的词汇是否隐藏
	                drawoutofbound: false,
	                color:"#fff",
	                left: "center",
	                top: "center",
	                right: null,
	                bottom: null,
	                // width: "100%",
	                height: "100%",
	                gridsize: 8,
	                textpadding: 10,
	                autosize: {
	                    enable: true,
	                    minsize: 6,
	                },
	                textstyle: {
	                    normal: {
	                        fontfamily: 'sans-serif',
	                        fontweight: 'bold',
	                        color:"#333", // 字体颜色
	                        // color: function () { // 字体颜色
	                        //     return 'rgb(' + [
	                        //         math.round(math.random() * 160),
	                        //         math.round(math.random() * 160),
	                        //         math.round(math.random() * 160)
	                        //     ].join(',') + ')';
	                        // },
	                    },
	                    emphasis: {
	                        // focus: 'self',
	                        textstyle:{
	                            shadowblur: 10,
	                            shadowcolor: "#333",
	                        }
	                    },
	                },
	                data: list,
	            },
	            ],
	        };
	        // maskimage.onload = function() {
	            mychart.setoption(option, true)
	        // };
	    },
  	}
}
</script>

vue中使用词云图的实现示例

无遮罩层的词云图↑

vue中使用词云图的实现示例

有遮罩层的词云图↑

highcharts

下载包

npm install highcharts@7.2.1
<div class="cloud-wrap">
    <div id="container" style="width: 100%;height: 100%;"></div>
</div>
<style>
	// 同上
</style>
<script>
import highcharts from 'highcharts'
export default {
	data() {
		return {
			words:[{
				id:1,
				content:'name'
			}],
		}
	},
	mounted() {
      this.dealdata();
  	},
  	methods:{
	    dealdata(){
	        let data = this.words.map((item,index) => ({
	            name: item.content,
	            value: item.id,
	            //weight: math.floor(math.random()*3+1)
	            //控制加粗,随机数取1~3, 若需要按照接口返回的顺序, 可不随机
	            weight: item.id*100 
	        }))
	        this.drawpic(data)
	    },
	    drawpic(data){
	        highcharts.chart('container', {
	            //highcharts logo
	            credits: { enabled: false },
	            //导出
	            exporting: { enabled: false },
	            //提示关闭
	            tooltip: { enabled: false },
	            //颜色配置
	            colors:[
	                '#ffffff'
	                // ,'#00c0d7','#2594ce','#de4c85',
	                // '#ff7f46','#ffb310','#e25c52'
	            ],
	            //图形配置
	            chart: {
	                // spacingbottom: 15,
	                // spacingtop: 12,
	                spacingleft: 5,
	                spacingright: 5,
	                backgroundcolor: "rgba(255, 255, 255,0)",
	            },
	
	            series: [{
	                type: "wordcloud",// 类型
	                data: data,
	                rotation: 90,//字体不旋转
	                maxfontsize: 40,//最大字体
	                minfontsize: 14,//最小字体
	                style: {
	                    fontfamily: "sans-serif",
	                    fontweight: '500'
	                }
	            }],
	        });
	    },
  	}
}
</script>

vue中使用词云图的实现示例

echarts 和 highcharts 都可以在vue中实现词云图. 但是如果使用echarts的话, 需要当前的echarts进行升级或降级才能实现字体多颜色, 而highcharts则不需要. 自定义形状highcharts暂时还没探究, 需要的可以自行查找, 以后有机会的话我也会看看.

到此这篇关于vue中使用词云图的文章就介绍到这了,更多相关vue中使用词云图内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关标签: vue 词云图