【发布时间】:2010-11-29 07:52:45
【问题描述】:
我有一些美国人口统计和企业统计数据。
我想绘制一个州或较小区域(例如城市)的邮政编码区域。每个区域将由特定于该区域的颜色和/或文本进行注释。输出将类似于http://maps.huge.info/,但 a) 带有带注释的文本; b) pdf 输出; c) 可在 R 或 Python 中编写脚本。
是否有任何包和代码允许我这样做?
【问题讨论】:
我有一些美国人口统计和企业统计数据。
我想绘制一个州或较小区域(例如城市)的邮政编码区域。每个区域将由特定于该区域的颜色和/或文本进行注释。输出将类似于http://maps.huge.info/,但 a) 带有带注释的文本; b) pdf 输出; c) 可在 R 或 Python 中编写脚本。
是否有任何包和代码允许我这样做?
【问题讨论】:
在 Python 中,您可以使用来自美国人口普查的 shapefile 以及 basemap 包。下面是一个filling in states 的例子,按人口统计。
【讨论】:
我假设您想要静态地图。
(来源:eduardoleoni.com)
1) 在 census.gov 获取zip 边界和state 边界的 shapefile:
2) 使用我在SO question 中发布的 plot.heat 函数。
例如(假设您在地图子目录中有 maryland shapefile):
library(maptools)
##substitute your shapefiles here
state.map <- readShapeSpatial("maps/st24_d00.shp")
zip.map <- readShapeSpatial("maps/zt24_d00.shp")
## this is the variable we will be plotting
zip.map@data$noise <- rnorm(nrow(zip.map@data))
## put the lab point x y locations of the zip codes in the data frame for easy retrieval
labelpos <- data.frame(do.call(rbind, lapply(zip.map@polygons, function(x) x@labpt)))
names(labelpos) <- c("x","y")
zip.map@data <- data.frame(zip.map@data, labelpos)
## plot it
png(file="map.png")
## plot colors
plot.heat(zip.map,state.map,z="noise",breaks=c(-Inf,-2,-1,0,1,2,Inf))
## plot text
with(zip.map@data[sample(1:nrow(zip.map@data), 10),] , text(x,y,NAME))
dev.off()
【讨论】:
zip.map@data$noise <- rnorm(nrow(zip.map@data)) labelpos <- data.frame(do.call(rbind, lapply(zip.map@polygons, function(x) x@labpt))) 和zip.map@data <- data.frame(zip.map@data, labelpos) 提供什么
在 R 中有很多方法可以做到这一点(参见spatial view);其中有很多depend on the "maps" package。
查看此cool example of the US 2004 election。它最终看起来像这样:
这是一个略显丑陋的模型示例that uses the "maps" package with "lattice".
这是一个非常简单的示例 using the "gmaps" package,它显示了每 100,000 人因谋杀而被捕的各州逮捕地图:
require(gmaps)
data(USArrests)
attach(USArrests)
grid.newpage()
grid.frame(name="map")
grid.pack("map",USALevelPlot(states=rownames(USArrests),levels=Murder,col.fun=reds),height=unit(1,'null'))
grid.pack("map",gradientLegendGrob(at=quantile(Murder),col.fun=reds),side="bottom",height=unit(.2,'npc'))
detach(USArrests)
【讨论】:
Daniel Levine at TechCrunch Trends 在 R 中使用 maps 包做了很多好事。他的网站上也有代码。
如果您准备学习一门(类 Java)新语言,Paul 关于研究处理(Ben Fry 用来制作 zipdecode)的建议也是一个很好的建议。
【讨论】:
R 中有一系列丰富而复杂的软件包,可用于绘图、分析和其他与 GIS 相关的功能。一个开始的地方是Spatial Data 上的 CRAN 任务视图: 这是一个复杂的,有时是神秘的世界,需要一些工作才能理解。
如果您正在寻找一款免费的、功能强大的地图应用程序,我建议您:
地图窗口 (mapwindow.com)
【讨论】:
查看 IBM 提供的这款出色的在线可视化工具 http://manyeyes.alphaworks.ibm.com/manyeyes/
编辑仅供参考,ManyEyes 将Prefuse visualization toolkit 用于其某些可视化。尽管它是一个基于 java 的框架,但它们也为 web 提供了 Flash/ActionScript 工具。
【讨论】:
可能有人对您有更直接的建议,但我发现 O'Reilly 的“R 中的数据混搭”非常有趣……在某种程度上,它是房屋止赎拍卖的空间映射。
【讨论】:
根据您的应用程序,很长的路要走可能是使用这样的东西:
http://googlemapsmania.blogspot.com/2006/07/new-google-maps-us-zip-code-mashups.html
映射您的数据。如果这不是您想要的,您可以从 census.gov 获取原始邮政编码 shapefile 并手动执行,这很痛苦。
另外,如果您还没有看到,这是一种与类似数据交互的巧妙方法,并且可能会提供一些指导:
【讨论】: