Plotly.js 热力图与折线结合

在这里插入图片描述
上次记录了Echarts热力图与折线图的结合,但其效果不是很自然。后又找到了Plotly.js库,发现其效果不错。在此整理下实现过程。这里面涉及到自定义工具栏、自定义工具图标等等

配置工具栏显示的工具图标

let config = {
	locale: 'zh-cn',      // 设置本地语言
	displayModeBar: true, // 显示工具栏
	displaylogo: false,   // 隐藏logo
	// 移除部分图标
	modeBarButtonsToRemove:  ['toImage', 'pan', 'zoom', 'zoomin', 'zoomout', 'lasso2d','autoscale','reset']
}

配置自定义工具栏按钮

// 在let config下添加按钮部分:
let config = {
	...
	modeBarButtonsToAdd: [
	   {
	     name: '折线',
	     icon: {
	        width: 500,
	        height:500,
	        path: 'M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V400c0 44.2 35.8 80 80 80H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H80c-8.8 0-16-7.2-16-16V64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L240 221.3l57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z',
	     },
	     // 绑定的点击事件,注意gb是整个div对象。可通过.xxx的方式获取div中的信息。比如:gb.id可得div的Id
	     click: function(gd) {
	       load_line_data('line', gd.id)  // 自定义图标按钮被点击后的事件,我这实现了点击后热力图切换成Echarts折线图的功能。
	     }
	   },
	],
}

设置layout:

let layout = {
  modebardisplay: false,
  title: { text: "热力图结合折线图", side: 'top center',  // 标题的位置及字体信息
    font: {
      color: "#73cff2",
      size: 14,
    },
  },
  margin: { t: 30, l: 24, b: 24, r: 0 },  // 调整图表位置
  paper_bgcolor: "#09357a",  // 设置图表背景色
  plot_bgcolor: "#09357a",    // 设置轴线背景色
  xaxis: {tickcolor: "#03c7ff",tickfont:{color: "#03c7ff"}},//刻度线的颜色
  yaxis: {visible: false,tickcolor: "#03c7ff",tickfont:{color: "#03c7ff"},zeroline:true, hoverformat: '.2r'},
};

配置热力图的数据

let heatmap = {
  type: "heatmap",
  name: "name会显示在图表的悬浮窗内",  // 可通过接口获得或者固定
  hoverinfo: "x+z",  // 悬浮窗需要显示的数据x表示数据的x轴对应的值,其他数据需要显示的话同理,配置上即可,支持:x、y、z、x+y、x+z...
  xhoverformat: "%Y-%m-%d %H:%M:%S",  // 如果x轴是时间的话,此配置可以格式化日期
  hovertemplate: '<b>日期:</b>: %{x}<br><b>权重:</b>: %{z:.4f}<br>',  // 悬浮窗的样式等等再这里配置
  hoverlabel: {
      bgcolor: "rgba(0,0,0,0)",  // 定义悬浮窗的背景颜色
      bordercolor: "#03c7ff",    // 定义悬浮窗的边框颜色
      font: {
          color: "#149b6a", // 定义悬浮窗内容字体颜色
          size: 14,     // 定义悬浮窗内容字体大小
      }
  },
  showscale: false,  // 是否显示右侧的颜色比例尺
  // 热力图的三维数据
  x: item.x,  
  y: item.y,
  z: item.z,
}

配置折线图的数据

let line = {
  mode: 'lines',
  name: item.text,
  xhoverformat: "%Y-%m-%d %H:%M:%S",  // 格式化悬浮窗的x轴时间字段
  hovertemplate: '<b>日期:</b>: %{x}<br><b>数据:</b>: %{customdata}<br>',  // 定义悬浮窗的内容
  hoverlabel: {
      bgcolor: "rgba(0,0,0,0)",  // 定义悬浮窗的背景颜色
      bordercolor: "#03c7ff",    // 定义悬浮窗的边框颜色
      font: {
          color: "#149b6a", // 定义悬浮窗内容字体颜色
          size: 14,     // 定义悬浮窗内容字体大小
      }
  },
  line: { color: "#149b6a", },  // 定义线的颜色
  x: item.x1,
  y: item.y1,
  customdata: item.customdata,   // 设置自定义数据(数组),此数据可在hovertemplate中访问。
}

完整代码如下:

// Dom元素的配置很简单:
<div id="chart_heatmap" style="width: 100%;height: 400px;"></div>
//  Javascript部分
const load_heatmap_data = function () {
        let chart_heatmap = document.getElementById("chart_heatmap");
        $.ajax({
            type: "POST",
            url: "后端接口地址",
            success: function (item) {
                # 设置配置信息
                let config = {
                    locale: 'zh-cn',
                    displayModeBar: true,
                    displaylogo: false,  //隐藏logo
                    displayReset: false, //
                    modeBarButtonsToRemove:  ['toImage', 'pan', 'zoom', 'zoomin', 'zoomout', 'lasso2d','autoscale','reset'],
                    modeBarButtonsToAdd: [
                        {
                          name: '折线',
                          icon: {
                             width: 500,
                             height:500,
                             // 折线图标的svg
                             path: 'M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V400c0 44.2 35.8 80 80 80H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H80c-8.8 0-16-7.2-16-16V64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L240 221.3l57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z',
                          },
                          click: function(gd) {
                            load_line_data('line', gd.id)
                          }
                        },
                    ],
                }
                let layout = {
                  modebardisplay: false,
                  title: { text: item.text, side: 'top center',
                    font: {
                      color: "#73cff2",
                      size: 14,
                    },
                  },
                  margin: { t: 30, l: 24, b: 24, r: 0 },
                  paper_bgcolor: "#09357a",  // 设置图表背景色
                  plot_bgcolor: "#09357a",    // 设置轴线背景色
                  xaxis: {tickcolor: "#03c7ff",tickfont:{color: "#03c7ff"}},//刻度线的颜色
                  yaxis: {visible: false,tickcolor: "#03c7ff",tickfont:{color: "#03c7ff"},
                  zeroline:true, hoverformat: '.2r'},
                };
                let heatmap = {
                  type: "heatmap",
                  name: item.text,
                  hoverinfo: "x+z",
                  xhoverformat: "%Y-%m-%d %H:%M:%S",
                  hovertemplate: '<b>日期:</b>: %{x}<br><b>权重:</b>: %{z:.4f}<br>',
                  hoverlabel: {
                      bgcolor: "rgba(0,0,0,0)",  // 定义悬浮窗的背景颜色
                      bordercolor: "#03c7ff",    // 定义悬浮窗的边框颜色
                      font: {
                          color: "#149b6a", // 定义悬浮窗内容字体颜色
                          size: 14,     // 定义悬浮窗内容字体大小
                      }
                  },
                  showscale: false,
                  x: item.x,
                  y: item.y,
                  z: item.z,
                }
                let line = {
                  mode: 'lines',
                  name: item.text,
                  xhoverformat: "%Y-%m-%d %H:%M:%S",  // 格式化悬浮窗的x轴时间字段
                  hovertemplate: '<b>日期:</b>: %{x}<br><b>数据:</b>: %{customdata}<br>',  // 定义悬浮窗的内容
                  hoverlabel: {
                      bgcolor: "rgba(0,0,0,0)",  // 定义悬浮窗的背景颜色
                      bordercolor: "#03c7ff",    // 定义悬浮窗的边框颜色
                      font: {
                          color: "#149b6a", // 定义悬浮窗内容字体颜色
                          size: 14,     // 定义悬浮窗内容字体大小
                      }
                  },
                  line: { color: "#149b6a", },  // 定义线的颜色
                  x: item.x1,
                  y: item.y1,
                  customdata: item.customdata,   // 设置自定义数据(数组),此数据可在hovertemplate中访问。
                }
               Plotly.newPlot(chart_heatmap, [heatmap, line], layout, config);
            },
            complete: function () {
                console.log("complete")
            },
        });
     };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/303984.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录刷题第四十三天| 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

代码随想录刷题第四十三天 今天为三道0-1背包问题的变种&#xff0c; 分别有三个小问题 给定一个容量为j的背包&#xff0c;尽可能装下物品&#xff0c;找到能装下物品的最大价值 dp[i][j] max(dp[i-1][j], dp[i-1][j-nums[i]]nums[i]) 给定一个容量为j的背包&#xff0c;找…

在docker中搭建部署clickhouse

因需要给网关日志拉取并存储供数据分析师分析&#xff0c;由于几十个项目的网关请求数量很大&#xff0c;放在mysql不合适&#xff0c;MongoDB不适合分析&#xff0c;于是准备存放在clickhouse&#xff0c;clickhouse对于读写支持也比较友好&#xff0c;说干就干 1、在服务器中…

Docker查看镜像的Dockerfile

前言 在使用Docker构建应用程序时&#xff0c;我们可以通过Dockerfile定义应用程序的环境&#xff0c;并将其打包成一个镜像。有时&#xff0c;我们可能需要查看一个已经构建好的镜像的Dockerfile&#xff0c;以了解镜像是如何构建的&#xff0c;或者进行后续的修改和调整。本…

C++中的虚函数

前言 本篇文章讲述C的虚函数 定义 在C语言中&#xff0c;基类将类型相关的函数和派生类不做改变直接继承的函数区分开来。对于有些函数&#xff0c;基类希望派生类各自定义适合自身的版本。那么基类就会将这些函数标记为virtual&#xff0c;这些被标记的函数就是虚函数。 下…

[计算机提升] 创建和管理一般共享文件夹

4.6 创建和管理一般共享文件夹 4.6.1 创建一般共享文件夹 通过创建共享文件夹&#xff0c;可以让多台计算机在同一网络上共享文件和文件夹。这对于团队协作、家庭用户共享文件和资源非常方便。方式如下&#xff1a; 1、选中要共享的文件夹&#xff0c;然后右键属性&#xff0…

软件测试大作业||测试计划+测试用例+性能用例+自动化用例+测试报告

xxx学院 2023—2024 学年度第二学期期末考试 《软件测试》&#xff08;A&#xff09;试题&#xff08;开卷&#xff09; 题目&#xff1a;以某一 web 系统为测试对象&#xff0c;完成以下文档的编写&#xff1a; &#xff08;满分 100 分&#xff09; &#xff08;1&am…

接雨水(Leetcode42)

例题&#xff1a; 题目说了&#xff0c;给定n个宽度为1的柱子&#xff0c;height数组中的每个元素表示每个柱子的高度。 只要柱子之间存在凹槽&#xff0c;就能接住雨水。 在解决这道题目之前&#xff0c;我们先了解一下单调递减栈。&#xff08;由栈底到栈顶逐渐递减&#xff…

项目知识—SSM及之后02

1、resultMap写的Base内容必须保证select都使用上 2、VALUE单个 &#xff0c;VALUES多个 3、一对多&#xff0c;两张表&#xff0c;多的表加外键 比如班级和学生就是一对多&#xff0c;查就是按照学生表去查询 多对多&#xff0c;三张表&#xff0c;关系表加外键 4、数据库…

yolov8实战第五天——yolov8+ffmpeg实时视频流检测并进行实时推流——(推流,保姆教学)

yolov8实战第一天——yolov8部署并训练自己的数据集&#xff08;保姆式教程&#xff09;_yolov8训练自己的数据集-CSDN博客 yolov8实战第三天——yolov8TensorRT部署&#xff08;python推理&#xff09;&#xff08;保姆教学&#xff09;-CSDN博客 今天&#xff0c;我们继续y…

深度解析 Compose 的 Modifier 原理 -- DrawModifier

其实原理性分析的文章&#xff0c;真的很难讲的通俗易懂&#xff0c;讲的简单了就没必要写了&#xff0c;讲的繁琐难懂往往大家也不乐意看&#xff0c;所以只能尽量想办法&#xff0c;找个好的角度&#xff08;比如从 Demo 代码示例出发&#xff09;慢慢带着大家去钻源码&#…

Linux查看物理CPU个数、核数、逻辑CPU个数

文章目录 总核数总逻辑CPU数查看物理CPU个数查看每个物理CPU中core的个数(即核数)查看逻辑CPU的个数 总核数 总核数 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep “…

湖南大学-数据库系统-2015期末考试解析

【写在前面】 这是2015年的卷子&#xff0c;应该是我能找到最老的一张了&#xff0c;遂做了并与同学校对了答案。答案仅供参考。这张难度不大&#xff0c;都是基础题。 一.单选题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09; 1、在数据库中&#xff0c;下列说法&a…

企业工商基本信息API:一站式掌握企业核心数据

引言 在当今快速发展的商业环境中&#xff0c;了解企业的基本信息是每个业务决策者的基本需求。然而&#xff0c;手动收集和处理这些信息既耗时又容易出错。企业工商基本信息查询API的出现&#xff0c;为企业提供了一个高效、准确的一站式解决方案。 企业工商基本信息API 企…

win10录音功能大盘点,帮你轻松搞定录音

“有人知道win10系统怎么录音吗&#xff1f;在网上找到了一段英语听力&#xff0c;本来打算保存下来&#xff0c;但是发现不能下载&#xff0c;我也不会使用电脑录音&#xff0c;真的很头疼&#xff0c;有人能帮帮我吗。” 在Windows 10系统中&#xff0c;录音是一项常见但往往…

PPT插件-布局参考-增加便携尺寸功能

PPT自带的尺寸为很久的尺寸&#xff0c;很多尺寸不常用&#xff0c;这里增加一些画册尺寸&#xff0c;用于PPT排版设计。 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件&#xff0c;它是一款功能强大且实用的PPT辅助工具&#xff0c;支持Wps Word和Office Word&#x…

Python——字符串的拼接

print("某某程序员" "月薪过万") name "吱昂张程序员" address "**大学" tel 19819208830 print("我是:"name"我的地址在&#xff1a;"address)#通过占位的形式完成字符串换的拼接 name"吱昂张" me…

【项目实战】Cadence工具的使用2

代码覆盖率的收集 双击total&#xff0c;打开imc工具。total 下的文件是代码覆盖率文件 找到DUT模块&#xff01;从图中可以看到代码的覆盖率已经是94.43% 添加exclude文件&#xff0c;注意和Synopsys的后缀不同。 导入.vRefine文件 代码覆盖率为100%。 原因是我们添加了exclu…

VS2022 | 调整适配虚幻5的设置

VS2022 | 调整适配虚幻5的设置

Spring学习 Spring事务控制

7.1.事务介绍 7.1.1.什么是事务&#xff1f; 当你需要一次执行多条SQL语句时&#xff0c;可以使用事务。通俗一点说&#xff0c;如果这几条SQL语句全部执行成功&#xff0c;则才对数据库进行一次更新&#xff0c;如果有一条SQL语句执行失败&#xff0c;则这几条SQL语句全部不…

工业自动化中RFID标签的应用案例

RFID标签是实现RFID数据采集的重要载体&#xff0c;利用RFID标签&#xff0c;可以将所有产品的信息写入标签中&#xff0c;大部分的RFID标签都以不干胶标签的形式使用&#xff0c;只需要在物品包装上贴RFID标签就可以。下面我们就一起来了解一下&#xff0c;工业自动化中RFID标…