在ArcPy中在两个点之间创建弧?


10

我一直在研究自动执行实时点数据可视化的python脚本。我有一个带有两个坐标对的表格。我想用圆弧或类似的弧线(抛物线??)将这两个点连接起来。

我已经能够用直线将两个点连接起来,但这给了我无聊的视觉效果。

主要的障碍之一是我的许可证级别:ArcView。

任何人都知道如何生成一组代表这两个点之间的直线路径的点吗?

然后,我可以使用指向折线的命令。


5
您实际上并未提供足够的信息:“改善无聊的视觉效果”既不是特定的,也不是好的问题陈述。但是也许您会从gis.stackexchange.com/questions/5204/…的类似主题中获得一些想法。
ub

1
您是同时查看行还是一次仅查看一(或几)行?
Andy W

点数可能在2到50之间
。– Pixel

Answers:


27

这些类型的“流图”似乎最常见的问题是,当包含多条线时,它们之间的碰撞程度很大,以至于很难辨别任何非显而易见的模式(当认为是倒数流时,就会发生更大的范围)。尽管很可能流的分布主要集中在短空间上(例如,地点之间的许多不同分布往往类似于征税飞行),但长线也往往会主导图形。我想这不一定是一件坏事(长线可能比许多现象的短线本质上更有趣),但是我不认为我们要为树木而失去森林。

尽管我毫不怀疑我已经错过了一些可能提出的“解决方案”,但我将尝试总结一些个人尝试解决的工作中遇到的问题的方法。

扭曲线条

如果您仔细看一下视线中的其他一些线索,您将看到一些有关人们如何处理此问题的示例。特别是,这些线会变形,因此它们不会彼此重叠或与地图上的其他对象重叠。Whuber 对另一个类似问题(已在评论中提及)的回答就是一个例子。斯坦福大学一些研究人员的演讲也证明了同样的想法(Phan等,2005)。感谢您的发言,dslamb 在另一个线程上获得了该答案(该线程的所有答案也将与您的问题有关)。我特别感到有趣的是,这方面的主要例子之一是米纳德(Minard)的旧移民地图,是理想输出的一个例子(大约在1864年!)。

给定您的特定用例(少量节点和行),这似乎足够。我提出的其他“解决方案”更旨在可视化具有许多行和多个来源-目的地的数据(尽管我认为它们通常对于整个社区都是有用的摘要,因此无论如何我都会继续)。

使用Alpha混合,颜色和线宽/高

我在前面提到的同一线程中列出的映射(网络流的表示形式)就是这些示例。facebook朋友是调整线条的Alpha级别的好例子,因此需要更多的流量来表示两个地方之间的较暗(或在这种情况下更亮)的连接。这也没有考虑较长的行,因为它们往往不经常发生。类似的逻辑来自之前在此论坛上提到的多边形区域的按值绘制地图(Roth等,2010)。

我在同一答案中呈现的另一幅地图使用颜色和非传统的3D透视弧线(Ratti等,2010)。作者使用聚类标准将同质区域组合在一起并对其进行颜色编码(因此,根据定义,颜色内的区域比颜色之间的流动模式更相似)。本身可以使用聚类标准来识别数据中的模式,尽管正如安德鲁·盖尔曼(Andrew Gelman)所提到的那样,这似乎是一个问题,但它可能会告诉您您已经知道的东西,彼此之间的距离更近往往有更多的联系。

最后,在该类别中,我包括使用线宽或在3d透视线高度的情况下对线进行加权(类似于alpha混合)以传达流量的技术。有关2d中的一些示例,请参见Tobler的流图软件页面上的页面(我提到的另一篇文章是使用线高的3d中的示例)。同样在该页面上,Tobler有一篇非常有用的文章,描述了流量映射的问题及其历史应用(Tobler,1987)。

3d中的另一个示例是此站点上的mankoff给出的答案。Sociological Images博客上的这篇帖子在流程图中显示了一种区分流入和流出的有用方法(尽管由于节点数和相对较小,并且可以在网络中布置节点,所以再次起作用)减少过度绘图的任意方法)。那些相同类型的箭头(以及其他一些使用散列的箭头)也出现在(Tobler,1987)中。

最后,尽管线宽和颜色并不能真正解决过度绘图问题。3d中的弧线有所帮助,尽管我认为它们的流模式更为复杂,但实用性有限。在这三种情况下,IMO alpha混合似乎是最有用的,但是可以/应该将颜色和线宽与上述线失真结合使用。

数据缩减

在这里,我将两种类型的技术归为一组:1)使用小的多张地图(即,许多地图固有地较少的对象可以可视化,从而减少了过度绘图),或2)其他图形表示,它们不是线,而是通过密度来表示一些流或Choropleth地图。这些示例可以在(Corcoran等,2009; Rae,2009; Wood等,2010)中找到(感谢iant提供了Rae参考)。通过呈现一系列小的多张地图(或只是一个较小的区域),或使用一个拟人化映射方案来表示一些统计信息,这些趋向于减少呈现的视觉信息量(示例可能是流入量,流出量,流的方向,流的平均距离)。如果您有点级数据,则可以通过内核密度栅格图表示这些统计信息,或将它们汇总到四方类中。

当这样减少信息时,过度绘图就不再是问题。一个非常酷的交互式在线示例是《福布斯》杂志的这张迁移地图。您一次只能看到一个县,但是信息的减少使解析线(以及流入和流出之间的差异)变得容易得多。ESRI制图博客上的最新帖子也使用了类似的技术,即倍数较小(他们还为世界地图选择了特殊的投影,以使线条具有“漂亮的外观”,并充分利用颜色来突出显示不同的国际起源)。在该示例中,它的效果非常好,因为所有流的最终目的地都是相同的,但是如果流是互惠的,则可能效果也不佳。

使用流的其他非地图表示形式

该站点上的其他人建议在实际地图中使用替代图表来表示流量(仅以其实际地理位置以外的其他方式映射起点和终点)。这些的实例是要么cicular可视化(例如由制造Circos),弧图(参见本实施例中上Protovis,这些也被称为kriskograms(肖&淳,2009)),或矩阵的热图(这里是另一个例子从Protovis网站)。另一种选择是使用某种类型的自动网络布局来识别流中的模式(例如Graphviz能够实现的模式)。除了Graphviz之外,它还出现了Gephi,NetworkX python库以及一些R库也是流行的工具(请参见统计网站上的此答案)。

我引用的库非常酷,因为它们也开发了交互式可视化。这是一个与圆形图形样式相似的示例(尽管不是圆形!)。这是另一个交互式可视化,它使用了前面讨论的一些线失真技术,网络布局(看起来类似于圆形的多林制图)以及其他有用的统计摘要(我在信息美学博客上最初看到了这两个例子)。


我认为有用的其他一些资源是来自Spatial Data Mining and Visual Analytics Lab的软件和文章。此外,CrimeStat程序中的犯罪旅行需求建模是对此类流数据的适用回归技术的简要介绍。这些工具中的任何一个都可以使您识别流模式中与其他地理信息的有趣关联。可能从图形显示数据或统计分析中获得一些有用启发的另一个地方是《计算与图形统计杂志》第20卷第2期的最新一期,研究1987年至2008年美国商业承运人的航班到达/起飞统计信息(如果您有兴趣处理大数据,那么也值得研究)。所有文章都是免费的,并且每篇论文都有相关的海报。

最后,数据和介质将决定这些技术中的某些技术在减少流量数据所伴随的视觉混乱方面的效果。我希望这是一个有用的地方,尽管可以找到有关如何解决此可视化问题的想法。如果您将问题进一步细化为要完成的工作,那么其他人可以将有用的反馈信息反馈给实际的程序实现(如果尚不可用)。


引文

*请注意,当我可以找到一个无格式的pdf文档的链接时


2
目前,我已经省略了任何图形,但是如果有人希望看到示例而不必遵循链接,则可以应要求提供任何图形。
安迪W

哇!...完成引用!如果我能投票两次,我会的!真棒,伙计:)
R Thiede

我目前使用数据缩减(和大圆圈线)找到了另一个非常酷的交互式可视化,通过Trulia Insights博客找出哪个美国城市是国际房屋猎人中最受欢迎的城市
Andy W

5

在我们自己的暗处,这里有一个很好的程序。

基本上,过程如下:-重新投影您想要的线之间的点,-在它们之间绘制一条直线,-将线细分为x数量,最后-将细分的线投影回到原始位置投影。

我已经停止使用Arc了,因为它要花钱,但是要使此过程正常进行,我认为您无需为提供基本功能而向ESRI支付任何额外的贿赂。我的意思是,我认为您不需要购买任何“扩展”。不过,我正在纠正中,因为我对细分线是否属于Spatial Analyst并不满意。也许有些ESRIcric喜欢的人可以在这里帮助我吗?:)


1
您以前无法使用ArcView进行真实的曲线绘制,但是ArcView从9版开始就可以进行真实的曲线绘制。
blord-castillo 2011年


2

您可以使用大圆图法从地图上的两个点创建视觉上吸引人的折线。请访问http://www.esri.com/software/arcgis/defense-solutions/military-analyst.html-军事分析师。应该有你要找的!


我现在还不能完全掌握Arc,但是通过重新投影是否可以做到这一点?因为军事分析师可能会花你的钱……
R Thiede

我认为该解决方案无论如何都不会奏效,因为我的地图范围大约为40英里。我相信,如果在一个大洲范围内,这可能会奏效。
像素

军事分析师是免费的@RThiede是的,它在更大范围内会更好。但是,您可以在创建直线后对其进行编辑以提供所需的内容(因为它们使用bezzier曲线沿折线产生数百个点来创建曲线)
Michael Markieta 2011年

我可以轻松地编辑线条以获得所需的弧,但是正如我的帖子所述,我正在使用Python自动执行此过程。感谢您的反馈!
像素
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.