echart热力图项目

本文详细介绍了在Vue项目中使用Echarts实现热力图和排行柱状图的交互功能,包括柱状图的y轴翻转、自定义宽度、颜色配置,热力图的设置,以及两者之间的悬停、点击交互。此外,还分享了截图功能的实现和解决图表更新卡顿的容器销毁重建策略。
摘要由CSDN通过智能技术生成

之前项目中运用echart热力图,在这里记录一下。

项目中如何实践echart

echart应用到项目起来很简单,大概分为以下几步:

  1. vue项目中下载echart:npm install echarts --save
  2. 在组件中导入:import echarts from ‘echarts’
  3. 给定一个有宽高的容器作为echart的画布如:
    <div class="echart-map"></div>
    
  4. echart的配置文件,是一个对象,一般会在echart官方实例网址上尝试调试好,再放到代码里。实际使用上,先通过init方法初始化echart,再通过setOption方法设置option对象。
    	let myArea = echarts.init(document.getElementsByClassName('echart-map')[0])
    	myArea.setOption(this.optionArea)
    
    至此已经完成echart画图。关于option,我的实际经验,会分成两部分:将静态的,不会发生变化的,或者是被不同的图通用的配置放到一个公共的js文件里;对于需要根据接口调用后动态生成的,或者同一种图,细微不同呈现方式的部分,放到实际的组件代码里,最后在setOption之前组装。这样既能满足公共配置封装,又能保持灵活性。
  5. 如果echart容器大小是需要动态变化的,比如使用了百分比,还需要在窗口大小变化时,调用resize方法实现适配
    window.onresize = () => {
         
    	let myRank = echarts.init(document.getElementsByClassName('echart-rank')[0])
    	myRank.resize()
    }
    
核心功能简介

项目中实现的功能,这里抽取出来核心功能并对实际业务进行抽离,主要要做一个如下的可视化展示功能:
在这里插入图片描述
可以看到,左上角可以切换展示的指标(ind1 - ind9)。切换时,按当前指标在左侧排名区域从大到小展示柱状图,排名前三的省用了一个高亮的渐变色表示;右侧热力地图按照当前指标数据展示。此外,当悬停左侧一个柱子时,进行黄色高亮,同时右侧地图相应省市也高亮为黄色,当点击一个柱子时,当前柱子变为橙色,同时右侧地图也将该省标橙色;反之在热力地图上操作也是类似更新柱状图区域。在柱状图上部有一个将整个可视化区域导出为图片的功能

排行柱状图

柱状图默认是横向的,首先这里要将y轴翻转,option中设置

  yAxis: {
   
	...
    inverse: true,
	...
  }

在布局方面,运用到了grid,并做了如下设置:

  grid: {
   
    top: 0,
    left: 92,
    right: 0,
    bottom: 0
  }

采用这个设置的原因,首先我们的柱状排行图需要在纵向上排满整个画布区域,如果不采用grid布局并将top、bottom设置为0,echart将默认将顶部和底部留空,这样达不到我们的目的。在运用grid的基础之上,这里我们就有机会通过设置画布的高度控制每个柱字整体所占据的宽度。

设置柱子的宽度
echart的柱状图是不能够直接控制柱子的宽度的,要精确控制每个柱子所占的宽度,我们可以变相思维,通过控制echart的高度,并将grid的top、bottom设置为0,然后设置画布的高度来实现我们期望的柱子宽度。
以本例来说,我们希望每个柱字整体占据的宽度为20px(并不是柱子本身的宽度,而是echart为每一个柱子区域实际分配的宽度,包含柱子本身以及上下空白部分,如下图所示部分)
在这里插入图片描述
这样我们只需要计算出我们有多少个省,然后将画布高度设置为:省市个数 * 20(px)即可。本例中首先在css设置画布为680px(34个省 * 20),然后根据当前接口返回数据个数进行动态调整:

	if (this.rankData.length < 34) {
   
    	// 如果数据不足34项排行重新设置echart高度为数据个数*20
        document.getElementsByClassName('echart-rank')[0].style.height = this.rankData.length * 20 + 'px'
    }

再画布外层包了一个固定高度的容器,并设置为overflow-y: scroll,当画布超出外层高度时,出现滚动条。这样设置以期在大屏上,我们能够完美展示34个省,没有滚动条࿰

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值