Mathematica中一个等值线图的最小例子是什么样的?

时间:2011-09-19 08:34:23

标签: wolfram-mathematica geospatial

Mathematica中choropleth地图的最小示例是什么样的?

我可以使用Import读取ESRI Shapefile,但不知道如何使用导入的结果。

5 个答案:

答案 0 :(得分:7)

Graphics[
   {
    ColorData["ThermometerColors"][
                            Rescale[CountryData[#, "GDPPerCapita"], {100, 50000}]
                                  ] /. HoldPattern[Blend[___]] -> Yellow, 
    CountryData[#, "Polygon"]
   } & /@
   CountryData[]
]

enter image description here

为什么更换?如果给定国家/地区没有所需类型的数据,则CountryData返回Missing [“NotAvailable”],导致ColorData及其基础Blend函数不返回特定的RGB值。我将这个未评估的Blend替换为黄色。

答案 1 :(得分:5)

仅供参考,这里有一些使用ESRI Shapefiles的技巧。 CountryData不提供德国的县级数据(行政单位称为“Kreis”),这就是我编写自己的KreisData函数的原因。我使用的形状文件可以是downloaded for free,但是有一些使用条款需要考虑。

然后创建KreisData函数,如下所示:

shp = Import["C:/TEMP/map/VG2500/vg2500_krs.shp", "Data"];
polys = "Geometry" /. First[shp];
ags = "RS" /. ("LabeledData" /. First[shp]);
names = "GEN" /. ("LabeledData" /. First[shp]);
area = "SHAPE_AREA" /. ("LabeledData" /. First[shp]);
KreisDataRules = 
  Dispatch[MapThread[
    Rule[#1, #2] &, {ags, Transpose[{polys, area, names}]}]];
KreisData[tag_String, "Polygon"] := First[tag /. KreisDataRules];
KreisData[tag_String, "Area"] := Part[tag /. KreisDataRules, 2];
KreisData[tag_String, "Name"] := Last[tag /. KreisDataRules];
KreisData[] := ags;

使用此函数和Sjoerd C. de Vries的示例代码,可以创建德国地图:

renderMap[scheme_String] :=
  Graphics[{ColorData[scheme][
        Rescale[KreisData[#, "Area"], {3.63067036816521*10^7, 
          3.08469540395003*10^9}]] /. 
       HoldPattern[Blend[___]] -> Yellow, KreisData[#, "Polygon"]} & /@
     KreisData[]];
Manipulate[renderMap[s], {s, ColorData["Gradients"]}]

Result with "GrayTones" color scheme

答案 2 :(得分:3)

抛出code golf意义上的 Minimal

Graphics@Function[f,{Hue[f[#,"Area"]/10^7],f[#,"Polygon"]} &/@ f[]]@CountryData

enter image description here

答案 3 :(得分:2)

因为我无法抗拒与belisarius的Code Golf比赛:

Graphics[{Hue[i~#~"Area"/10^7],i~#~"Polygon"}~Table~{i,#[]}&@CountryData]

(同样的结果)

答案 4 :(得分:0)

@Karsten W .:很遗憾,您的shp文件不再可用。我从相同的源尝试了类似的(vg250_0101.utm32s.shape.ebenen \ vg250_ebenen \ vg250_krs.shp),但是我从函数KreisDataRules中收到了错误消息“移调:前两个级别无法移调”。而且由于我不太了解您的代码的作用,因此也许您可以提供帮助。 我尝试在Kreis级别上制作主题地图,其中的颜色表示我们城市的游客人数,如有必要,还应为0。 我将非常感谢您的帮助。