是的,可以通过简单的方法实现,并且还有更复杂的方法可以校正地球形状。
Tableau中的hexbin
函数适用于任何X-Y数据,将原始坐标分成六边形区域。
在地图上,数据通常以表达为度数的纬度-经度坐标形式出现。Tableau可以直接绘制这些数据,但通常使用略有扭曲的Web Mercator投影(远离赤道的地区被极大地放大)。这意味着在纬度-经度上定义的六边形容器大小不相等(东西方向上的一度代表地球表面上的距离随着纬度升高而变小,离赤道越远;但南北线上的一度长度大约始终是111公里)。
简单版本会忽略这种扭曲并从纬度-经度坐标生成六边形容器。首先,我将介绍基于这种简单技术的方法。我基于一个包含英国每个邮政编码位置的数据集(大约250万行,密度在不同地理位置上具有广泛范围)。
基本方法包括几个步骤:
- 使用参数生成一个缩放因子,以调整六边形的大小
- 生成一个值来定义六边形顶点的额外点数(我通过向数据集中的每一行添加一个值来实现,该值由1到6的随机数组成)
- 生成六边形中心的经纬度坐标
- 添加定义六边形顶点的6个点
- 在地图上将六边形作为多边形绘制出来(然后可以根据基础数据进行任何聚合着色)
以下是逐步指南。
我定义了一个参数hexbin size
,表示六边形的半径(以度为单位)。然后,根据数据集中每行的纬度和经度值,定义六边形如下:
![hexbinx formula](https://istack.dev59.com/JPbsX.webp)
十六进制二进制公式类似。
数据集本身包含一个名为PointID的字段,其中包含从1到6的值。(有多种方法可以实现这一点,但在数据集中进行比在Tableau中进行更容易,因为许多数据库包含哈希函数,可以保证整数的随机分布,可以通过简单的模函数将其转换为1到6的数字)。我根据PointID的值定义了一个新字段angle(以帮助定义六边形的顶点):
![angle formula](https://istack.dev59.com/3a5uo.webp)
现在我可以添加需要绘制以定义六边形多边形的点:
![plot lat formula](https://istack.dev59.com/8jdmi.webp)
经度类似:
![plot lon formula](https://istack.dev59.com/jKmC8.webp)
此时数据集中应该包含足够的行以确保每个六边形内都包含从1到6的所有值,因此六边形的所有点都已定义。
要绘制六边形,请适当设置地理角色以绘制经度和纬度字段,并依次双击每个字段。然后将hexbinx和hexbiny拖到详细信息中,并将图表类型从自动更改为多边形。这将产生一些可怕的混乱,可以通过将PointID拖到路径来解决。这应该给出以下结果(我还添加了行数的计数以着色六边形并调整颜色和透明度):
![simple hexbin map](https://istack.dev59.com/o2ZB3.webp)
这表明基本技术有效,但也显示出一个关键问题:六角形多边形被扭曲了。如果您可以接受这一点(在赤道附近或小面积情况下问题不太严重),那么就坚持使用它。
但是,如果您关心畸变(视觉效果以及六边形覆盖面积不相等的事实),则需要进行更复杂的操作。下面所描述的内容基于Tableau的Sarah Battersby的工作。
以下调整需要一些额外步骤:
- 基于距离生成新的缩放因子
- 将纬度 - 经度值转换为基于距离而不是纬度 - 经度度数的Web Mercator系统中的X-Y坐标
- 使用新的坐标系统中的距离而不是角度生成六边形多边形
- 将基于距离的六边形多边形转换回纬度 - 经度坐标以定义六边形多边形中心
- 使用距离坐标添加六边形多边形顶点,然后转换回纬度 - 经度
您还需要添加一个地球半径参数,这是坐标转换中的转换因子。
这是如何工作的。首先进行到X-Y坐标的转换:
![mercator y formula](https://istack.dev59.com/JJVmr.webp)
现在我们可以在新坐标上使用六边形分组:
![hexbin mercator formula](https://istack.dev59.com/KtAwd.webp)
以下是将这些坐标转换回纬度和经度的公式(如果您只想绘制中心,则很有用):
![adjusted hexbin lon](https://istack.dev59.com/lWZl1.webp)
请注意,复杂的公式是纬度公式。
但是,为了使六边形多边形在绘制时正常工作,您必须在将其转换回纬度经度坐标之前为6个顶点添加额外的点。转换方式与上述公式相同,最终公式如下:
![plot lon adjusted](https://istack.dev59.com/xUlQr.webp)
额外的部分只是根据缩放因子确定的六个角度的六边形大小,为六边形中心添加一个固定的距离,以便于hexbin的坐标。保留html标签。
当与前面的多边形绘图以相同方式绘制时,应该看起来像这样(进行整理后):保留html标签。
![adjusted polygon map](https://istack.dev59.com/Xc1CJ.webp)
现在六边形的视觉外观和实际大小都更好了。
要查看包含上述计算的Tableau Public工作簿
请点这里。
PS:Tableau可以并且应该将大部分此功能集成到产品中,因为它可以极大地简化有用的技术。