echarts地图 散点图拖动和缩放的时候不跟着地图移动
请问啥问题呢?
chartMap()
//this.request(
let myChart= echarts.init(document.getElementById("iframe"))
//console.1og(myChart’,myChart)
echarts.registerMap("santai", santai);
letoption=!
backgroundColor: "#Q30528"
geo:
map:"santai"
aspectScale:
zoom:0.65,
silent:false,//暂不支持鼠标交互
layoutCenter:"50%","50%"1
layoutSize: "128%",
show:true
roam:true
center:undefined
1abel:f
emphasis:
show:true
textStyle:
co1or:RGBA(78,132,183,1)
itemstyle:
normal:{
areaColor: ‘RGBA(84,138,185,1),
borderColor: "#4ECEE6"
borderwidth:1,
shadouColor:"#4ECEE6"
shadowoffsetY:0,
shadowBlur:25,
geo: {
backgroundColor:'#232e67',
map: 'china',
roam: true,
},
series: [
{
backgroundColor:'#232e67',
name: '用户分布',
type: 'map',
mapType: 'china',
data: []
}
]
比如说同时设置两个属性 一个是geo 一个是series
两个都是map
该写法会造成上图地图重叠现象,对于该问题,在echarts官方文档中找到了答案,可以通过 geoIndex属性指定geo组件
官方叙述如下:
默认情况下,map series会自己生成内部专用的geo组件。但是也可以用 geoIndex 指定一个geo组件。这样的话,map和其他 serise中的type=map可以共享一个geo组件。并且,Geo组件的颜色也可以被这个map serise控制。当设定 geoIndex后,series-map.map属性,以及series-map.itemStyle等样式配置不再起作用,而是采用geo中的相应属性。
series: [
{
backgroundColor:'#232e67',
name: '用户分布',
type: 'map',
mapType: 'china',
geoIndex: 0,
data: []
}
]
加上就好了
好啦 小编要赶紧工作去了呢
对于问题 "如何让echarts地图上的点位跟着地图缩放和拖动而移动?",可以采取如下步骤:
首先,在 echarts 地图基础上添加飞线图时,需要确保点位信息是以经纬度坐标的形式存储的,而不是直接使用了普通图形元素的坐标系。
接着,从官方文档中找到 echarts 对于缩放和拖动的处理机制,通常是通过 "geo" 组件中的 "silent" 属性来控制,建议将其设置为 false,这样在缩放和拖动时也可以触发点位的重绘。
最后,为了保证性能和流畅度,可以将点位信息和飞线图的绘制代码独立出来,使用 "setOption" 方法动态更新地图状态,而不是在缩放和拖动时一直重绘。
实现代码参考如下:
// 初始化地图和飞线图
let myChart = echarts.init(document.getElementById('map'));
let option = {
geo: {
show: true,
map: 'world',
roam: true,
silent: false, // 设置为 false 来触发点位重绘
zoom: 1,
center: [120, 30], // 示例中心坐标
label: {
emphasis: {
show: false
}
},
itemStyle: {
normal: {
areaColor: '#323c48',
borderColor: '#111'
}
}
},
series: [
// 绘制点位信息
{
type: 'scatter',
coordinateSystem: 'geo',
data: [
{ name: 'Beijing', value: [116.46, 39.92] },
{ name: 'Shanghai', value: [121.48, 31.22] },
{ name: 'Guangzhou', value: [113.23, 23.16] }
],
symbolSize: 10,
itemStyle: {
normal: {
color: '#FFFF00'
}
},
tooltip: {
formatter: '{b}'
}
},
// 绘制飞线图
{
type: 'lines',
zlevel: 2,
symbol: ['none', 'arrow'],
symbolSize: 10,
effect: {
show: true,
period: 6,
trailLength: 0.7,
symbol: 'arrow',
symbolSize: 10
},
lineStyle: {
normal: {
color: '#A6C84C',
width: 0,
curveness: 0.2
}
},
data: [
{ fromName: 'Beijing', toName: 'Shanghai', coords: [[116.46, 39.92], [121.48, 31.22]] },
{ fromName: 'Beijing', toName: 'Guangzhou', coords: [[116.46, 39.92], [113.23, 23.16]] }
]
}
]
};
myChart.setOption(option);
// 绑定地图缩放和拖动事件
myChart.on('geoRoam', () => {
myChart.setOption(option);
});
对于问题 "将雷达图数值放在类目值下并根据数值大小设置不同背景色标注",可以采取如下步骤:
首先,需要确保雷达图的 "indicator" 指标是按照从左到右、从上到下的顺序排列的,即可以使用示例中的 "let indicator" 定义。
接着,在雷达图的 "name" 属性中设置富文本格式,将类目名和数值分别展示,并且根据数值大小决定背景色标注的展示。
最后,为了控制多个类目名在同一行展示,可以通过判断奇偶性来分别使用换行符 '\n' 和空格符 ' ',从而达到期望的效果。
实现代码参考如下:
// 初始化雷达图
let valueArr = [83,53,81,70,85,48,90,10,6]
let myChart = echarts.init(document.getElementById('radar'));
let option = {
radar: {
indicator: [
{ name: '数学', max: 100 },
{ name: '语文', max: 100 },
{ name: '英语', max: 100 },
{ name: '化学', max: 100 },
{ name: '物理', max: 100 },
{ name: '生物', max: 100 },
{ name: '体育', max: 100 },
{ name: '音乐', max: 100 },
{ name: '美术', max: 100 }
],
// 其他配置项省略...
},
series: [
{
// 其他配置项省略...
name: {
rich: {
a: {
color: '#000',
lineHeight: 16
},
b: {
color: '#fff',
align: 'center',
backgroundColor: '#F2821D',
padding: 2,
borderRadius: 4
},
c:{
color: '#fff',
align: 'center',
backgroundColor: '#F7C242',
padding: 2,
borderRadius: 4
},
d:{
color: '#fff',
align: 'center',
backgroundColor: '#B0DAAA',
padding: 2,
borderRadius: 4
},
e:{
color: '#fff',
align: 'center',
backgroundColor: '#CECECE',
padding: 2,
borderRadius: 4
}
},
// 判断数值大小,设置不同格式
formatter: (a,b) => {
let isOdd = (valueArr.length % 2 != 0)
let nosplitArr = isOdd?[0,parseInt(valueArr.length/2),parseInt(valueArr.length/2)+1]:[0,parseInt(valueArr.length/2)]
console.log('splitArr',nosplitArr);
i++
let splitStr = '\n'
if(nosplitArr.includes(i)){
splitStr = ' '
}
itemValue = parseInt(`${valueArr[i]}`)
if(itemValue > 80){
return `{a|${a}}${splitStr}{b|${valueArr[i]}}`
}else if(itemValue > 60){
return `{a|${a}}${splitStr}{c|${valueArr[i]}}`
}else if(itemValue > 50){
return `{a|${a}}${splitStr}{d|${valueArr[i]}}`
}else{
return `{a|${a}}${splitStr}{e|${valueArr[i]}}`
}
}
},
// 其他配置项省略...
}
]
};
myChart.setOption(option);