如何用六边形网格制作炫酷的地名地址信息热力图?

1.为什么要用六边形网格

在地图数据可视化中,使用六边形(蜂窝)网格的优点主要有:
1.六边形是能分割平面边数最多的多边形,比四边形更有效;
2.视觉歧义最小。相对于其他规则的多边形分割,六边形在视觉上的歧义最小,比如四边形的话,人眼有可能就认为是一组横线和竖线。
帅
如图,二元点集被网格化为四边形和六边形。bin的scale大致相等,bin的size与bin中点的数量成正比。我们可以看到,当将数据绘制为四边形网格的时候,眼睛会被吸引到与基础网格平行的规则线(纵/横),这是由于矩形的线性性质;而六边形倾向于断开直线,并且使数据模式中所有的曲率更加清晰直观。
3.使用六边形查找领域更加直接
在这里插入图片描述
由于六边形的等方向性,在使用距离范围查找邻域的时候会更加方便。
在常用的地理范围查询中,基于矩形的查询方法,存在8邻域到中心网格的距离不相等的问题,也就是说六边形网格与周围网格的距离有且仅有一个,而四边形存在两类距离。
所以,基于hexagon的地理单元已经成为各大厂家的首选,比如 Uber 和 Didi 的峰时定价服务。
在这里插入图片描述
综合以上,我们考虑用六边形网格进行可视化。
补充:当然,六边形网格也不是完美无缺的,它也存在一个问题:无法进行多尺度剖分。这是由于它的几何结构决定的,换言之,大六边形无法拆解成更小的六边形,小的六边形也无法组成一个更大的六边形。所以在本案例中,六边形网格热力图只能在较大尺度上进行观察,有关缩放的操作,还是基于四边形的网格的。

2.数据选取

灵感来源是一个美国人Zachary Forest Johnson制作的沃尔玛商店位置的可视化http://indiemaps.github.io/hexbin-js/tests/walmart.html
由于近年来新能源汽车发展势头正猛,充电站也相应增加。本文选取了北京市所有充电站的地名地址信息数据作为研究对象。
数据来源:高德地图。首先需要在高德开放平台获取key。https://lbs.amap.com/dev/key/app
数据抓取:选用LSV软件,在左下角搜索框中输入北京市,会出现北京市地图,然后点击“下载”,选择高德POI抓取,将框出的北京市地图选择为面对象,在关键词输入中“充电站”,类型选择地名地址信息。这个软件优点在于数据的输出格式是csv文件,如果想要用excel进行地图可视化也是可以实现的。
在这里插入图片描述
下面是抓取到的数据:
在这里插入图片描述
统计到共有2618个充电站信息。

3.可视化效果

在这里插入图片描述
在这里插入图片描述
其中六边形网格的颜色表示其中数据点的数量,数量越多,颜色越深,没有数据则为透明。点的数量可以在六边形网格上直接看到。(ps:清北这对cp刚好被放到了同一个网格里,这个网格里共有54个数据点哦~)点击想要查询的网格即可显示里面充电站的位置分布。
在这里插入图片描述
在这里插入图片描述

### 回答1: Matlab是一种强大的数学软件,可以用于数据分析、可视化和模拟等领域。在Matlab中,我们可以通过编程来生成六边形网格图。 生成六边形网格图的方法如下: 1. 首先,我们可以使用Matlab自带的plot函数绘制一个六边形的外部轮廓。可以通过计算顶点的坐标,然后连接它们来生成六边形的形状。 2. 接下来,我们可以通过生成多个六边形来构建六边形网格。可以使用两层循环,分别控制水平和垂直方向的六边形数量,然后按照规律布局它们的位置。 3. 为了使六边形网格图更加美观,可以修改每个六边形的填充颜色、边框颜色和线宽等属性。可以使用Matlab的图形属性函数来实现这些操作。 4. 如果需要在六边形网格图中显示数据,可以将数据与每个六边形相关联。可以使用不同的颜色来表示不同的数据范围,或者使用填充颜色的深浅来表示数据的大小。 5. 最后,可以通过添加标题、坐标轴标签和图例等来完善六边形网格图的展示效果。 总之,通过Matlab编程可以生成六边形网格图,我们可以灵活地控制六边形的形状、颜色和数据显示方式,实现多种多样的可视化效果。 ### 回答2: 在MATLAB中,可以使用pdepe函数和pdegeom函数来绘制六边形网格图。 首先,我们需要定义一个边界函数,以确定六边形区域的形状。通过pdegeom函数,我们可以绘制一个六边形,并设置边界条件。例如,我们可以使用以下代码来定义一个边界函数: function [x,y] = hexagon(t) r = 1; % 六边形的半径 x = r*cos(t); y = r*sin(t); end 接下来,我们可以使用pdegeom函数来创建一个Geometry对象,并将边界函数传递给它。例如,我们可以使用以下代码来创建一个六边形对象: geom = pdegeom; geom = geometryFromEdges(geom,@hexagon); 接下来,我们可以使用decsg函数将Geometry对象转换为DEC格式,以便进行网格生成。然后,可以使用pdeplot函数绘制六边形区域的边界。例如,我们可以使用以下代码来绘制六边形的边界: [dl,bt] = decsg(geom); pdeplot(dl,'xydata',bt,'zdata',bt,'color','b') 最后,我们可以使用pdepe函数来解决偏微分方程,并将解绘制到六边形网格图上。例如,我们可以使用以下代码来解决一个简单的热传导方程,并将温度场绘制到六边形网格图上: m = 0; c = 1; a = 0; f = 1; tlist = 0:0.1:1; u = pdepe(m,@(x,t,u,DuDx)deal(1,0,0),@(x)1,@(xl,ul,xr,ur,t)1,m,c,a,f,dl,bl,p,tlist'); pdeplot(dl,'xydata',u(end,:)','zdata',u(end,:)') 通过以上过程,我们可以在MATLAB中绘制出六边形网格图,并在该网格上求解和绘制偏微分方程的解。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值