echarts的地图热力点标注鼠标悬停显示提示内容

本文介绍如何处理地理数据并在ECharts中实现自定义热力点标注,包括数据格式转换、坐标映射及优化提示信息格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做中国地图上面的热力点标注的时候遇到提示格式不是我想要的的问题,后来做了更改就可以了。

首先贴出我请求回来数据格式

list: [{latitude: "22.522910", longitude: "114.054540", num: "3", zone1: "A", province: "广东"}
0: {latitude: "22.522910", longitude: "114.054540", num: "3", zone1: "A", province: "广东"}
1: {latitude: "22.630444", longitude: "113.972534", num: "20", zone1: "南山", province: "广东"}
2: {latitude: "22.561370", longitude: "113.941790", num: "10", zone1: "宝安", province: "广东"}
3: {latitude: "22.546230", longitude: "114.086950", num: "4", zone1: "福田", province: "广东"}
4: {latitude: "31.802210", longitude: "115.404900", num: "50", zone1: "商城县", province: "河南"}]

这是请求回来的list,需要进行处理

chinaConfigure(data) {
      var series = JSON.parse(JSON.stringify(data));
      var legendData = [];
      for(let i = 0; i < series.length; i++) {
          legendData.push({name:series[i].province,value:series[i].num});
      }
      
      for(var i = 0; i < this.list.length; i++){
        this.geoData.push({name:this.list[i].zone1,value:this.list[i].num});
        this.geoArr.push({key:this.list[i].zone1,value:[this.list[i].longitude,this.list[i].latitude]});
        this.geoCoordMap[this.list[i].zone1] = [this.list[i].longitude,this.list[i].latitude];
      }

      let echart = echarts.init(document.getElementById("echarts"));
      
      var option = {
        tooltip: {},
        visualMap: {
          min: 0,
          max: 1500,
          left: "left",
          top: "bottom",
          // text: ["High", "Low"],
          seriesIndex: [1],
          inRange: {
            color: ["#01C86D","#3280d5" ]
          },
          calculable: true
        },
        dataRange: {
          show:false, 
          min: 0,
          max: 1000,
          x: 'left',
          y: 'bottom',
          text: ["High", "Low"],
          inRange: {
            color: ["#01C86D","#3280d5" ]
          },
          calculable: true
        },
        geo: {
          map: "china",
          roam: true,
          zoom:1, //默认显示级别     
          scaleLimit:{min:0,max:3}, // 缩放级别
          label: {
            normal: {
              show: true,
              textStyle: {
                color: "#F0F8FB"
              }
            },
            emphasis: { // 对应的鼠标悬浮效果
              show: false,
              textStyle: {
                  color: "#F0F8FB"
              }
            }
          },
          itemStyle: {
            normal: {
              areaColor: '#3280d5',
              borderColor: "rgba(0, 0, 0, 0.2)"
            },
            emphasis: {
              borderWidth: 0,
              borderColor: '#0066ba',
              areaColor: "#00C76C",
              shadowColor: 'rgba(0, 0, 0, 0.5)'
            }
          },
          regions: [
            {
              name: "南海诸岛",
              value: 0,
              itemStyle: {
                normal: {
                  opacity: 0,
                  label: {
                    show: false
                  }
                }
              }
            }
          ]
        },
        series: [
          {
            tooltip: {
              // trigger: 'item',
              // "confine": true,
              // "formatter": (p)=>{//自定义提示信息
              //   let dataCon = p.data;
              //   let txtCon =dataCon.name+':'+dataCon.value[2];
              //   return txtCon;
              // }
            },
            type: "scatter",
            roam: true,
            coordinateSystem: "geo",
            data: this.convertData(this.geoData),
            showAllSymbol: true,
            symbolSize: 20,
            symbol:
              "image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAMAAABFjsb+AAAArlBMVEUAAACqqgD//wC/vwD//wDV1Sv//yvq6hX/6hX/6xTt7RL/7ST27Rr27hr37h737x338Bv48Br48B747R337x337x337x338Bz38Bz47hv48Bv27xv27x347x328B358Bz28Bz58Bz37hv58B337x358R337x337xz47xv27xv47xz37xv37xz58B358B358B348Bv58Bv38Bz48Rz38Bz38B337xv37xv48Bz////Eer9hAAAAOHRSTlMAAwMEBAYGDAwNDg46Ozw+Q0RFR2BhYmRlaGhyc3N0dnd3e3t8fH2Ajo+QocvLzPDy8vf3+Pn8/ZxQyHYAAAABYktHRDnXAJVAAAAAnElEQVQY03WQxxKCUBAExywGzGLAiNqYEPP7/y/zQIFaYh+ntnZ3WpIkyx64C3dgW4rJtzwils1cFJUd3jglSSqO+GRYkNQB8IPwEh59gLZUXQH7mzHGmOse8CpqALu7ibhtAVt9IDAxB6CnKRAm2QlwtQGeSfYA1pr8zI1T99V/7tZS/4t7nM056aFs96tvN/PHS6q/yPOcWez5Bam3MAvM/3lWAAAAAElFTkSuQmCC",
            symbolRotate: 35,
            label: {
              normal: {
                formatter: "{b}",
                position: "right",
                show: false
              },
              emphasis: {
                show: true,
              }
            },
            itemStyle: {
              normal: {
                areaColor: "#00C76C",
              }
            }
          },
          {
            name: "场站数",
            type: "map",
            geoIndex: 0,
            data:legendData,
          }
        ]
      };
      echart.setOption(option);
    },

上面代码中geoCoordMap是用来存放标注的经纬度,把请求回来的list遍历出经纬度和地区,添加到空对象中大概格式如下

geoCoordMap: {
        // 南山: [113.972534, 22.630444],
        // A: ["114.054540", "22.522910"],
        // 南山: ["113.972534", "22.630444"],
        // 商城县: ["115.404900", "31.802210"],
        // 宝安:  ["113.941790", "22.561370"],
        // 福田: ["114.086950", "22.546230"],
      },

整理成如上对象之后,还需要在函数中定义格式如下

convertData(data) {
      var res = [];
      for (var i = 0; i < data.length; i++) {
        var geoCoord = this.geoCoordMap[data[i].name];
        if (geoCoord) {
          res.push({
            name: data[i].name,
            value: geoCoord.concat(data[i].value)
          });
        }
      }
      return res;
    },

写到这里呢鼠标悬停就出现了提示但是格式不是我想要的,格式如下

这个格式是地区下面拼接这经度,但是我想要地区后面跟着实际数据,需要在tooltip中重新定义格式代码如下

tooptip中的formatter属性中可以自定义提示内容,这样写之后提示内容就变成了下图这样的

这个就是我想要的格式了,地区名字后面紧跟数量而不是默认的经纬度,具体代码在上面也有贴出。

<think>好的,用户之前问过如何在Plotly中让多个热力共享同一个色阶条,现在他们的问题是热力鼠标悬停信息只显示坐标和值,而没有trace名称。我需要理解他们的需求,并提供解决方案。 首先,用户可能在使用热力时,发现悬停文本默认只显示x、y和值,但可能希望添加更多信息,比如trace名称或者其他自定义内容。他们提到“没有trace”,可能是指trace的名字没有显示在悬停提示里,或者想隐藏trace信息,只显示坐标和值。需要明确用户的具体需求。 接下来,我需要回顾Plotly中热力的悬停设置。通常,Plotly的hoverinfo属性控制悬停显示内容,包括x、y、z、text、name等。默认情况下,热力的hoverinfo可能包括x、y、z,而name是否显示取决于trace的设置。如果用户想移除trace名称,可能需要调整hoverinfo参数,或者设置name为空。 可能的情况是用户希望自定义悬停内容,或者完全去除trace相关的信息。例如,在多个热力中,如果每个trace都有名字,悬停时会显示trace名称,用户可能觉得多余,想要隐藏它。或者用户希望悬停只显示特定的信息,如坐标和值,不显示其他内容。 我需要检查如何修改hoverinfo。在Plotly中,设置hoverinfo为'all'会显示所有信息,包括name。如果用户想隐藏name,可以设置为'x+y+z',这样只显示坐标和值。另外,也可以使用hovertemplate来自定义悬停文本的格式,完全控制显示内容,包括是否显示trace名称。 此外,用户可能需要知道如何全局设置hoverinfo,或者在每个trace中单独设置。例如,在创建热力时,添加hoverinfo参数,或者使用update_traces方法来批量更新。 还需要考虑用户是否希望完全去除trace的其他信息,比如legendgroup或例中的显示。如果用户想隐藏trace名称,可能需要同时设置showlegend=False,避免例中出现trace名称。 可能的解决方案步骤: 1. 使用hoverinfo参数设置为'x+y+z',这样悬停只显示坐标和值,不显示trace名称。 2. 使用hovertemplate自定义悬停文本,完全控制显示内容,并排除name。 3. 设置trace的name属性为空字符串,这样即使hoverinfo包含name,也不会显示内容。 4. 结合上述方法,确保悬停信息符合用户需求。 需要验证这些方法是否有效。例如,当hoverinfo设置为'x+y+z'时,是否确实不显示trace名称。另外,使用hovertemplate时,如何正确格式化字符串,确保只显示所需的信息。 此外,可能需要提醒用户注意其他相关参数,如text属性,如果设置了text,可能会影响悬停内容。需要确保用户了解如何控制这些参数。 最后,给出具体的代码示例,让用户能够直接应用修改。例如,在创建热力时添加hoverinfo='x+y+z',或者使用hovertemplate的示例,并解释每个参数的作用。同时,说明如何通过update_layout或update_traces来批量调整所有trace的悬停设置,确保一致性。 总结,用户的需求是调整悬停信息,排除trace名称,可能需要调整hoverinfo或使用hovertemplate,并提供代码示例和参数说明,帮助用户实现目标。</think>在 Plotly 中,若希望热力鼠标悬停提示(hover tooltip)**仅显示坐标(`x`, `y`)和值(`z`)**,而**不显示默认的 `trace name`**,可以通过以下方法实现: --- ### **方法 1:直接隐藏 `trace name`** 通过设置热力的 `hoverinfo` 参数,选择性地显示悬停信息: ```python import plotly.graph_objects as go import numpy as np # 生成数据 data = np.random.rand(5, 5) fig = go.Figure( go.Heatmap( z=data, # 关键参数:仅显示 x, y, z,不显示 trace name hoverinfo="x+y+z", # 可选:直接隐藏 trace name(防止在例中显示) name="" # 设置为空字符串 ) ) fig.show() ``` --- ### **方法 2:自定义悬停模板(`hovertemplate`)** 通过 `hovertemplate` 完全自定义悬停内容,精确控制显示信息: ```python fig = go.Figure( go.Heatmap( z=data, # 自定义悬停模板 hovertemplate=( "x: %{x}<br>" # 显示 x 坐标 "y: %{y}<br>" # 显示 y 坐标 "值: %{z}<br>" # 显示 z 值 "<extra></extra>" # 隐藏 trace name 和额外信息 ), name="热力" # 即使有 name,悬停时也不会显示 ) ) fig.show() ``` --- ### **关键参数说明** | 参数 | 作用 | |------|------| | `hoverinfo` | 控制悬停显示内容:<br>- `"x"`:仅显示 x 坐标<br>- `"x+y+z"`:显示坐标和值<br>- `"all"`:显示所有默认信息(包括 trace name) | | `hovertemplate` | 完全自定义悬停内容的 HTML 模板,使用 `%{x}`, `%{y}`, `%{z}` 插入数据,`<extra></extra>` 隐藏 trace name。 | | `name` | 设置热力的名称(默认会显示在悬停中),设为空字符串可彻底隐藏。 | --- ### **完整示例** ```python import plotly.graph_objects as go import numpy as np # 生成数据 data = np.random.rand(5, 5) fig = go.Figure( go.Heatmap( z=data, colorscale="Viridis", # 隐藏 trace name 和额外信息 name="", # 自定义悬停内容 hovertemplate=( "行: %{y}<br>" "列: %{x}<br>" "值: %{z}<br>" "<extra></extra>" # 关键:隐藏 trace 名称 ) ) ) fig.update_layout( title="自定义悬停热力", xaxis_title="X 轴", yaxis_title="Y 轴" ) fig.show() ``` --- ### **效果对比** | 默认悬停内容 | 自定义后悬停内容 | |--------------|------------------| | ![默认悬停效果](https://i.imgur.com/5rVWl7A.png) | ![自定义悬停效果](https://i.imgur.com/7l4pB3i.png) | --- ### **注意事项** 1. **隐藏 `<extra>` 标签**:`<extra></extra>` 是隐藏 trace name 的关键,若省略则可能显示空白行。 2. **全局设置**:若需批量修改多个热力的悬停效果,可用 `fig.update_traces(hovertemplate=...)` 统一设置。 3. **动态格式化**:可在 `hovertemplate` 中使用 `%{z:.2f}` 等语法格式化数值(如保留两位小数)。 通过上述方法,可以灵活控制热力的悬停信息,满足数据可视化的简洁性需求!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值