2010-11-18 110 views
12

如果有人不知道:A cartogram是一种地图,其中某些国家/地区相关的数字属性缩放各个区域以使该属性的密度(接近)恒定。一个例子是用Matplotlib绘制图表?

Example cartogram

worldmapper.org

。在这个例子中,各国根据其人口进行调整,导致人口密度几乎不变。

不用说,这真的很酷。有没有人知道基于Matplotlib的库来绘制这样的地图? worldmapper.org使用的方法在(1)中描述,所以如果没有人实现这一点,它会让我感到惊讶...

我也有兴趣听到其他cartogram库,即使他们不是为Matplotlib制作的。

(1)Michael T.Gastner和M.E.J.Newman, 用于产生密度均衡图的基于扩散的方法, Proc。纳特。科学院。科学。 USA,101,7499-7504(2004)。可在arXiv

+0

有一个很好的动画示例[here](http://metrocosm.com/the-housing-value-of-every-county-in-the-us/),有一些(但可能不是全部)有关如何制作的详细信息。 – naught101 2015-08-18 00:20:29

回答

4

this,虽然它是基于和不同的算法(尽管它在ESRI网站上,它不需要ArcGIS)。当然,一旦你有了cartogram,你可以将它绘制在matplotlib中。

+0

辉煌,谢谢!当我说“用Matplotlib”时,我想我很困惑自己。我想我正在考虑Matplotlib人们称之为工具包的东西,比如Map工具箱,但是我完全没有理由为什么我真的想要这样的东西。你的解决方案肯定会满足:-) – gspr 2010-11-22 08:52:02

0

Here是一个使用D3制作制图的Javascript插件。如果您不太关心地区大小的准确性,这是一个好的,简单的解决方案。如果精度很重要,还有其他选项可以让您更自由地使用算法参数来获得更准确的结果。

这里有两个伟大的独立的程序,我知道的:

Scapetoad是非常容易使用。只需给它一个shapefile,告诉它用于缩放的属性,并设置一些精度参数。如果有任何疑问,this post描述该过程。

Carto3F更复杂,并且允许更高的准确性,但要弄清楚有点棘手 - 很多参数设置没有很多文档解释它们。使用Python编写的也有QGIS cartogram plugin。虽然我一直无法工作,所以不能对此发表评论。

0

总之,没有。但纽曼有一个很好的实施他和加斯特纳的方法on his website。安装它很容易,它可以从命令行运行。以下是使用此软件的工作流程示例。

  1. 计算某个区域的密度估计网格,例如,在Python中。将其存储为数字矩阵。
  2. 运行cart程序,将密度矩阵作为命令行的输入或Python中的子进程输入。
  3. 该程序返回每个网格点的新坐标列表。
  4. 通过interp程序将shapefile点移动到新的shapefile中以获取转换后的地图。

在主页上有很好的说明。