大家在网上看天气预报的时候应该就看到过在中国地图上显示不同省份的温度,并根据温度的高低显示不同的颜色,又或者看到各个省份的新冠肺炎新增人数,根据不同的新增人数显示不同的颜色之类的图像。这些,使用echarts中的map就可以实现,今天就来实现一下热力图,热力图就是根据不同数据显示不同颜色的地图。
首先创建一个元素用于承载图像。
<div id="heatmap">div>
初始化echarts实例
const echartsInstance = echarts.init(document.getElementById('heatmap'));
然后注册地图数据,地图数据是一个json文件,json数据中包含各个省份的坐标、名称、省会城市等信息,在使用前需要先注册在echarts中。
echarts.registerMap('china', 'china.json');
接下来配置数据配置
数据较多使用函数生成
function createData(){
return china.features.map(item => {
return {
name:item.properties.shortName,
value: Math.floor(Math.random() * 361)
}
})
}
const options = {
visualMap:{
type:'piecewise',
pieces:[{
min:0,
max:100,
color:'#10ff10'
},{
min:101,
max:190,
color:'#eeffaa'
},{
min:191,
max:360,
color:'#eeffff'
}]
},
series:[{
type:'map',
map:'china',
nameProperty:'shortName',
name:'shortName',
data:createData()
}]
};
在geo字段中我们可以看到map属性的值就是我们注册的地图的名字。
nameProperty是显示的字段,该字段与JSON数据中的字段相对应。
要在geo上根据数据的大小显示不同的颜色,需要使用visualMap,visualMap把数据映射成对应的图元,即可以显示的图像信息。
由于是显示热力图,我们就使用连续的数据,即数据是连续的不是离散的。
我们可以在pieces中配置不同数据需要显示的颜色。
在series中我们需要声明type为map,这样就能显示不同的数据。
在map图中有一个map属性,这个属性的值就是我们注册的地图名。
nameProperty是在地图上显示的值的字段名,默认是name,该值与地图json数据中的字段相对应。
接下来,设置选项
echartsInstance.setOption(options);
效果如图所示
除了map系列可以实现这样的效果外,geo也可以实现,不过geo本身并不能显示数据,它只显示地图,因此需要其他的系列显示数据,比map的配置要麻烦一些,不过geo支持点数据和线集。