Mathematica中choropleth地图的最小示例是什么样的?
我可以使用Import
读取ESRI Shapefile,但不知道如何使用导入的结果。
答案 0 :(得分:7)
Graphics[
{
ColorData["ThermometerColors"][
Rescale[CountryData[#, "GDPPerCapita"], {100, 50000}]
] /. HoldPattern[Blend[___]] -> Yellow,
CountryData[#, "Polygon"]
} & /@
CountryData[]
]
为什么更换?如果给定国家/地区没有所需类型的数据,则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"]}]
答案 2 :(得分:3)
抛出code golf意义上的 Minimal :
Graphics@Function[f,{Hue[f[#,"Area"]/10^7],f[#,"Polygon"]} &/@ f[]]@CountryData
答案 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。 我将非常感谢您的帮助。