Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >看完这篇,还有你不会画的热力图吗?

看完这篇,还有你不会画的热力图吗?

作者头像
巴山学长
发布于 2019-10-22 07:56:01
发布于 2019-10-22 07:56:01
5.7K01
代码可运行
举报
文章被收录于专栏:巴山学长巴山学长
运行总次数:1
代码可运行
之前有不少小伙伴在公众号里问怎么绘制热力图,今天就给大家说道说道。热力图(Heat Map),最初的定义是指一个以颜色变化来显示数据的矩阵,逐步演化成为用颜色变化来表征某种数据经过降维处理后的变化情况。热力图在各行各业都有着广泛地应用,比如地图热力图、网页/APP热力图以及业务数据热力图等。

基于以上概念,不难理解,绘制热力图所需要的数据往往是3维或者更高维度的,下面给出三维的两种常见的数据样本格式:

格式一、点型数据,即知道三维空间的若干个数据点(x,y,z),其中z为待表征量:

格式二、网格型数据,网格型数据本质上还是点型数据,只是在样本数据预处理时有细微区别,同样z为待表征量:

清楚了样本数据格式后,以人口密度热力图来说明热力图的制作原理,下图是从腾讯位置大数据(heat.qq.com)上截取截取的北京市朝阳区欢乐谷2019年10月18日17:00的人口密度图。

为了绘制上面一张图,首先要获取腾讯地图使用者的位置(经度x, 纬度y),统计规定时间内在某个位置区域使用腾讯地图的人数,将统计的人数除以位置区域的面积即可得到该区的人口密度z。现在数据点(x,y,z)均已获取,不过数据离散性很大。如果只是单纯地绘制所得到的数据,那将是一个个不同颜色的离散点。为了最大化利用获取的数据,使得更具有宏观参考价值,对获取的数据采用数学处理方法进行数据扩充是很有必要的,扩充之后就能实现全域观察,最后形成了上图。

通过上面的简述,相信小伙伴们对热力图的绘制原理应该有所了解了吧。要在二维空间里绘制三维数据,有没有什么办法呢?答案是肯定的,那就是把第三维用另外一种形式来表征,而颜色就是最合适的候选者,将第三维数据与颜色值一一对应,这样就可以在二维空间完成三维数据的绘制。

下面以第一种样本数据格式来演示热力图的绘制:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clc;clear;close all;
% 定义点(x,y,z)
x = randn(50,1);
xmax = max(x);
xmin = min(x);
y = randn(50,1);
ymax = max(y);
ymin = min(y);
z = exp(sin(x.^2)) + exp(cos(y.^2));
N = 500; % 每个维度的数据点数
% 网格化x,y二维空间
[X,Y] = meshgrid(linspace(xmin,xmax,N),linspace(ymin,ymax,N));
% 采用插值法扩展数据,可用方法有'linear'(default)|'nearest'|'natural'|'cubic'|'v4'|
Z = griddata(x,y,z,X,Y,'v4');
%% 等高线法
figure('NumberTitle','off','Name','等高线法','Color','w','MenuBar','none','ToolBar','none');
contourf(X,Y,Z,N, 'LineColor','none');
colormap('jet');
colorbar;
axis off;
%% 投影图法
figure('NumberTitle','off','Name','投影图法','Color','w','MenuBar','none','ToolBar','none');
surf(X,Y,Z,'LineStyle','none');
xlim([min(X(:)) max(X(:))]);
ylim([min(Y(:)) max(Y(:))]);
axis off;
colormap('jet');
colorbar;
shading interp;
view(0,90);
%% imagesc法
figure('NumberTitle','off','Name','imagesc法','Color','w','MenuBar','none','ToolBar','none');
% 因为图像坐标和笛卡尔坐标起始位置不一样,需要上下翻转
imagesc(flipud(Z));
colormap('jet');
colorbar;
axis off;
%% pcolor法
figure('NumberTitle','off','Name','pcolor法','Color','w','MenuBar','none','ToolBar','none');
pcolor(X,Y,Z);
colormap('jet');
colorbar;
shading interp;
axis off;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信小程序----全局状态管理 (便于全局埋点等操作)
说明 由于我是一个有着一颗玻璃心的博主,导致在2018年后博客很少更新。原因是由于我的分享并没有解决到部分人的问题,而导致被骂了。当时这颗玻璃心就碎了,所以这两年以来很是消极,博客很少更新。这里给那些关注我,支持我的朋友说声【对不起】!前段时间,看了一个工作两年时间博主的 2021 年 flag,突然回首,还有很多记忆。所以,我决定以后每周最少一篇博客,记录我的学习和成长。谢谢! 需求场景 小程序开发完成,接到需求:需要对小程序的所有页面【onLoad】生命周期进行埋点,对页面中的点击事件进行埋点。
Rattenking
2021/02/01
3.3K0
微信小程序生命周期学习笔记-组件
生命周期包含应用生命周期、页面生命周期和组件生命周期。现在我们来学习组件的生命周期。
面向对象思考
2020/07/23
7980
微信小程序生命周期学习笔记-组件
微信小程序全面实战,架构设计 && 躲坑攻略
近集中开发了两款微信小程序,分别是好奇心日历(每天一条辞典+一个小投票)和好奇心日报(轻量版),直接上图:
java爱好者
2019/06/27
1.7K0
小程序开发知识必备-自定义组件
在 component 文件目录下,创建一个 select 文件夹,随后 select 文件夹下手动创建:select.js、select.json、select.wxml、select.wxss 四个文件。
leader755
2022/03/09
1.4K0
小程序开发知识必备-自定义组件
深入浅出redux知识
为了防止自己手动调用 store.dispatch ,一般会使用redux的这个 bindActionCreators 方法来自动绑定 dispatch 方法,用法如下。
Qiang
2019/06/12
1.1K0
深入浅出redux知识
实现redux
上面实现了兄弟组件的通信,但是复用性差,而且store里的listeners不应该被外界修改。
一粒小麦
2019/07/18
8110
实现redux
React 进阶 - React Redux
应用初始化时候,只请求一次数据,然后通过状态管理把数据存起来,需要数据的组件只需要从状态管理中‘拿’就可以了。
Cellinlab
2023/05/17
1.2K0
React 进阶 - React Redux
一文带你快速从0到1了解实战小程序知识点
onLoad 事件在小程序加载完成后发生,该事件通常用于初始化小程序的数据和配置。例如,你可以在 onLoad 事件中使用 JavaScript 对象来获取用户的数据,或者将数据加载到小程序中。
程序员海军
2023/11/11
4710
一文带你深入了解小程序生命周期
onLoad 事件在小程序加载完成后发生,该事件通常用于初始化小程序的数据和配置。例如,你可以在 onLoad 事件中使用 JavaScript 对象来获取用户的数据,或者将数据加载到小程序中。
程序员海军
2023/11/11
9110
【微信小程序】---- weapp-redux的使用文档
weapp-redux 下载 weapp-redux 使用实例下载 预览 weapp-redux 使用 1. 引入 weapp-redux 插件 克隆 weapp-redux-demo 代码库 git clone https://gitee.com/Rattenking/weapp-redux-demo.git 将项目文件夹下的 weapp-redux 拷贝到自己项目 2. 创建全局的 store 在 weapp-redux 同级创建 store 文件夹 在 store 文件夹下分别创建 actions
Rattenking
2022/01/06
8920
【微信小程序】---- weapp-redux的使用文档
小程序商品规格属性界面布局,实现每种属性选择一个
kiki.
2022/09/29
1.1K0
小程序商品规格属性界面布局,实现每种属性选择一个
react-redux 源码解析一: Provider做了什么,发布订阅模式实现?
使用过react的同学都知道,redux作为react公共状态管理容器,配合react-redux可以很好的派发更新,更新视图渲染的作用,那么对于react-redux是如何做到根据state的改变,而更新组件,促使视图渲染的呢,让我们一起来探讨一下,react-redux源码的奥妙所在。在正式分析之前我们不妨来想几个问题: 1 为什么要在root跟组件上使用react-redux的provider组件包裹 2 redux是使用store.subscribe()来发布订阅 ,那么react-redux组件更新是否也是用这个模式呢 3 provide 用什么方式存放当前的redux的 store, 又是怎么传递给每一个需要管理state的组件的 带着这些疑问我们不妨先看一下Provider究竟做了什么
用户6835371
2021/06/01
1.7K0
小程序开发利器:WePY框架提升开发效率
在小程序开发中,提高开发效率、优化代码质量和增强用户体验是每位开发者都追求的目标。
Onegun
2023/05/31
6040
小程序开发利器:WePY框架提升开发效率
【愚公系列】2022年10月 微信小程序-电商项目-使用vtabs实现商品列表页
要实现商品列表页需要使用到weui的纵向选项卡(vtabs)功能,用于让用户在不同的视图中进行切换。
愚公搬代码
2022/10/05
8500
【愚公系列】2022年10月 微信小程序-电商项目-使用vtabs实现商品列表页
【taro react】---- 【使用 redux 的配置笔记】
1. 目标 学会 yarn 或 npm 安装中间件 学会配置 redux 的 store 学会 store 的接入和使用 2. 安装中间件 安装redux用到的中间件: redux react-redux redux-thunk redux-logger $ yarn add redux react-redux redux-thunk redux-logger # 或者使用 npm $ npm install --save redux react-redux redux-thunk redux-logge
Rattenking
2022/01/06
1.3K0
【干货】从零实现 react-redux
在 React 诞生之初,Facebook 宣传这是一个用于前端开发的界面库,仅仅是一个 View 层。前面我们也介绍过 React 的组件通信,在大型应用中,处理好 React 组件通信和状态管理就显得非常重要。为了解决这一问题,Facebook 最先提出了单向数据流的 Flux 架构,弥补了使用 React 开发大型网站的不足。
winty
2020/03/31
1.8K0
【干货】从零实现 react-redux
redux源码简单实现
简单实现applyMiddleWare,combinReducers,bindActionCreatores,
刘嘿哈
2022/10/25
4040
微信小程序开发
要求开发者有一些前端知识(HTML,CSS ,JavaScript), “工欲善其事必先利其器”,我们得先:
狂奔滴小马
2021/11/15
8.1K0
微信小程序开发
带你玩转小程序开发实践|含直播回顾视频
作者:张利涛 本文原创,转载请注明作者及出处 小程序和 H5 区别 小程序的运行过程 解决小程序接口不支持 Promise 的问题 小程序组件化开发及通信 小程序和 H5 区别 我们不一样,不一
iKcamp
2018/01/04
1.5K0
带你玩转小程序开发实践|含直播回顾视频
「源码解析」一文吃透react-redux源码(useMemo经典源码级案例)
使用过redux的同学都知道,redux作为react公共状态管理工具,配合react-redux可以很好的管理数据,派发更新,更新视图渲染的作用,那么对于 react-redux 是如何做到根据 state 的改变,而更新组件,促使视图渲染的呢,让我们一起来探讨一下,react-redux 源码的奥妙所在。
用户6835371
2021/06/01
2.5K1
「源码解析」一文吃透react-redux源码(useMemo经典源码级案例)
推荐阅读
相关推荐
微信小程序----全局状态管理 (便于全局埋点等操作)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验