Vue echarts4 热力图
直角坐标系下利用geo地理坐标系组件构建的热力图下面图1为echarts官网上的一个实例,简单的利用点坐标进行热力图渲染,略显粗糙,不是很符合项目要求,图2为在echarts gallery上找到的一个热力图实例。...
直角坐标系下利用geo地理坐标系组件构建的热力图
下面图1为echarts官网上的一个实例,简单的利用点坐标进行热力图渲染,略显粗糙,不是很符合项目要求,图2为在echarts gallery上找到的一个热力图实例。
下面为图2的配置项:
var axisdata = [];
for (var i = -5; i < 5; i++) {
axisdata.push(i)
}
function makeHeatData() {
let maxDegree = 360
let points = []
let radius = 5
let buildPoints = function(radius) {
let degree = maxDegree / (radius * 8)
for (let i = 1; i < maxDegree; i += degree) {
points.push(
[
Math.sin(i) * radius,
Math.cos(i) * radius,
i
]
)
}
}
for (let i = 1; i <= 5; i++) {
buildPoints(i)
}
return points;
}
var data = makeHeatData();
option = {
tooltip: {
show: true
},
geo: [{
map: 'world',
zoom: 0,
roam: true,
show: false,
id: 'geo1',
itemStyle: {
areaColor: 'rgb(0,0,0,0)'
},
height: '100%'
}],
grid: {
show: true,
height: '62%',
width: '50%',
top: '20%',
left: 'center',
borderColor: 'rgb(0,0,0,0)'
},
animation: false,
xAxis: {
type: 'value',
data: axisdata
},
yAxis: {
type: 'value',
data: axisdata
},
series: [{
id: 'test',
name: "fs",
type: 'heatmap',
coordinateSystem: 'cartesian2d',
data: data,
gridIndex: 0,
itemStyle: {
show: true,
color: 'rgb(0,0,0,0)'//不显示
}
}, ]
};
myChart.setOption(option);
function convertToPx(dataitem) {
var newxy = myChart.convertToPixel({
seriesId: 'test'
}, dataitem);
return newxy
}
function convertToGeo(dataitem) {
var pointobj = myChart.convertFromPixel({
geoId: 'geo1'
}, convertToPx(dataitem));
var point = [pointobj[0], pointobj[1]];
return point;
}
function convertData(data, x, y) {
var convertedData = [];
x = Math.ceil(x);
y = Math.ceil(y);
for (var i = 0; i < data.length; i++) {
if (data[i][0] >= x && data[i][1] >= y) {
var geoCoord = convertToGeo([data[i][0], data[i][1]]);
geoCoord.push(data[i][2]); //
convertedData.push(geoCoord);
}
}
return convertedData;
}
var cusdata = convertData(data, -6, -6);
setTimeout(function() {
myChart.setOption({
series: [{
name: 'testheatmap',
type: 'heatmap',
id: 'testheatmap',
coordinateSystem: 'geo',
seriesIndex: 1,
geoIndex: 0,
data: cusdata,
blurSize: 20,
pointSize: 20
}, ],
visualMap: {
show: true,
top: 'bottom',
seriesIndex: 1,
calculable: true,
min: 0,
max: 250,
inRange: {
color: ['blue', 'green', 'yellow', 'red']
}
}
});
}, 500);
主要是利用pointSize和blurSize来调整热力图每个点的大小和每个点模糊的大小,但是由于这两个属性只在地理坐标系(coordinateSystem: ‘geo’)上有效,所以需要将坐标转化到地理坐标系。
主要思路(个人理解):先将直角坐标系上的点坐标转化为像素坐标值,再将该像素坐标值转化为地理坐标系的点坐标值,然后通过geoCoord.push(data[i][2]);
将该坐标点的热力值赋值给地理坐标点,以此来确保坐标点的热力值不变。最后通过blurSize和pointSize来调整点模糊的大小和点的大小,通过visualMap来调整视觉映射的颜色等等。
几个主要方法:
1.myChart.convertToPixel() --> 转换坐标系上的点到像素坐标值
myChart.convertToPixel({
seriesId: 'test'
}, dataitem);
参数1:用于指示『使用哪个坐标系进行转换』。 通常地,可以使用 index 或者 id 或者 name 来定位。
参数2:要被转换的值
return: 转换的结果为像素坐标值
2.myChart.convertFromPixel() --> 转换像素坐标值到逻辑坐标系上的点,是convertToPixel的逆运算。
myChart.convertFromPixel({
geoId: 'geo1'
}, convertToPx(dataitem));
参数1:用于指示『使用哪个坐标系进行转换』
参数2:要被转换的值,为像素坐标值
return: 转换的结果,为逻辑坐标值
Echarts常用API参考链接:Echarts常用API(echarts和echartsInstance)
更多推荐
所有评论(0)