有没有一种好的方法可以自动创建六边形图块来可视化地图上的六边形?

3
几个版本之前,Tableau引入了HexBin函数,以允许将地理信息(或任何按x-y坐标组合的信息)分组到相等大小的六边形单元中。这在创建地图时非常有用,因为底层信息不会地理上平均分布。
hexbin的中心点可以直接作为点地图绘制,但这并不像实际绘制覆盖整个平面的六边形地图那样令人满意。一些博客主张使用形状而不是点来创建所需的结果。例如,这篇Tableau博客使用了hex bin,但绘制它们时使用了非六边形形状。 这篇博客建议使用自定义六边形形状,但它们不能镶嵌,并且当hexbin的比例变化时(同一比例不适用于所有东西),管理它们很麻烦。
那么有没有一种好的方法来自动创建具有不同六边形密度的镶嵌六边形以绘制地图?
补充问题:为什么Tableau没有内置此功能?如何调整地球的形状,当六边形基于纬度/经度时?

1
这实际上比你一开始想象的要复杂得多。在2016年Tableau会议上,有几个关于这个主题的有用演示,可以在http://tclive.tableau.com上找到。观看任何Sarah Battersby的视频即可。 - Alex Blakemore
1个回答

2

是的,可以通过简单的方法实现,并且还有更复杂的方法可以校正地球形状。

Tableau中的hexbin函数适用于任何X-Y数据,将原始坐标分成六边形区域。

在地图上,数据通常以表达为度数的纬度-经度坐标形式出现。Tableau可以直接绘制这些数据,但通常使用略有扭曲的Web Mercator投影(远离赤道的地区被极大地放大)。这意味着在纬度-经度上定义的六边形容器大小不相等(东西方向上的一度代表地球表面上的距离随着纬度升高而变小,离赤道越远;但南北线上的一度长度大约始终是111公里)。

简单版本会忽略这种扭曲并从纬度-经度坐标生成六边形容器。首先,我将介绍基于这种简单技术的方法。我基于一个包含英国每个邮政编码位置的数据集(大约250万行,密度在不同地理位置上具有广泛范围)。

基本方法包括几个步骤:

  • 使用参数生成一个缩放因子,以调整六边形的大小
  • 生成一个值来定义六边形顶点的额外点数(我通过向数据集中的每一行添加一个值来实现,该值由1到6的随机数组成)
  • 生成六边形中心的经纬度坐标
  • 添加定义六边形顶点的6个点
  • 在地图上将六边形作为多边形绘制出来(然后可以根据基础数据进行任何聚合着色)

以下是逐步指南。

我定义了一个参数hexbin size,表示六边形的半径(以度为单位)。然后,根据数据集中每行的纬度和经度值,定义六边形如下:

hexbinx formula

十六进制二进制公式类似。

数据集本身包含一个名为PointID的字段,其中包含从1到6的值。(有多种方法可以实现这一点,但在数据集中进行比在Tableau中进行更容易,因为许多数据库包含哈希函数,可以保证整数的随机分布,可以通过简单的模函数将其转换为1到6的数字)。我根据PointID的值定义了一个新字段angle(以帮助定义六边形的顶点):

angle formula

现在我可以添加需要绘制以定义六边形多边形的点:

plot lat formula

经度类似:

plot lon formula

此时数据集中应该包含足够的行以确保每个六边形内都包含从1到6的所有值,因此六边形的所有点都已定义。
要绘制六边形,请适当设置地理角色以绘制经度和纬度字段,并依次双击每个字段。然后将hexbinx和hexbiny拖到详细信息中,并将图表类型从自动更改为多边形。这将产生一些可怕的混乱,可以通过将PointID拖到路径来解决。这应该给出以下结果(我还添加了行数的计数以着色六边形并调整颜色和透明度):

simple hexbin map

这表明基本技术有效,但也显示出一个关键问题:六角形多边形被扭曲了。如果您可以接受这一点(在赤道附近或小面积情况下问题不太严重),那么就坚持使用它。
但是,如果您关心畸变(视觉效果以及六边形覆盖面积不相等的事实),则需要进行更复杂的操作。下面所描述的内容基于Tableau的Sarah Battersby的工作。
以下调整需要一些额外步骤:
- 基于距离生成新的缩放因子 - 将纬度 - 经度值转换为基于距离而不是纬度 - 经度度数的Web Mercator系统中的X-Y坐标 - 使用新的坐标系统中的距离而不是角度生成六边形多边形 - 将基于距离的六边形多边形转换回纬度 - 经度坐标以定义六边形多边形中心 - 使用距离坐标添加六边形多边形顶点,然后转换回纬度 - 经度
您还需要添加一个地球半径参数,这是坐标转换中的转换因子。
这是如何工作的。首先进行到X-Y坐标的转换:

mercator x formula mercator y formula

现在我们可以在新坐标上使用六边形分组:

hexbin mercator formula

以下是将这些坐标转换回纬度和经度的公式(如果您只想绘制中心,则很有用):

adjusted hexbin lat adjusted hexbin lon

请注意,复杂的公式是纬度公式。
但是,为了使六边形多边形在绘制时正常工作,您必须在将其转换回纬度经度坐标之前为6个顶点添加额外的点。转换方式与上述公式相同,最终公式如下:

plot lat adjusted plot lon adjusted

额外的部分只是根据缩放因子确定的六个角度的六边形大小,为六边形中心添加一个固定的距离,以便于hexbin的坐标。保留html标签。
当与前面的多边形绘图以相同方式绘制时,应该看起来像这样(进行整理后):保留html标签。

adjusted polygon map

现在六边形的视觉外观和实际大小都更好了。
要查看包含上述计算的Tableau Public工作簿请点这里
PS:Tableau可以并且应该将大部分此功能集成到产品中,因为它可以极大地简化有用的技术。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接