根据NPA(地区),对瑞士进行地图标注。

9
我计划在瑞士进行一项调查。将要询问NPA。 NPA(邮政编码)包含4个数字。
例如,1227是卡鲁热的NPA(日内瓦州的一部分-瑞士)。
例如,1784是Courtepin的NPA(弗里堡州的一部分-瑞士)。
等等。
我想知道如何在地图上表示所有观察值(约1500个)。我考虑使用ggplot,因为我用它制作其他图表(我认为ggplot很“美丽”)。但是,我也乐意听取其他任何建议。
以下是一些虚假数据: http://pastebin.com/HsuQnLP3 瑞士地图的输出应该与美国地图有点相似(来源:http://www.openintro.org)。

enter image description here

更新:

我尝试创建了一些代码:

library(sp)
test <-  url("https://dl.dropboxusercontent.com/u/6421260/CHE_adm3.RData")
print(load(test))
close(test)

gadm$NAME_3
gadm$TYPE_3

但是看起来http://gadm.org/没有提供市镇的NPA...

最新更新:

我找到了一个带有NPA的形状文件(感谢@yrochat): http://www.cadastre.ch/internet/cadastre/fr/home/products/plz/data.html

它是名为“Shape LV03”的ZIP文件。

然后我尝试了

library("maptools")
swissmap <- readShapeLines("C:/Users/yourName/YourPath/PLZO_SHP_LV03/PLZO_PLZ.shp")
plot(swissmap)
data <- data.frame(swissmap)
data$PLZ #the row who gives the NPA

我有一个包含邮政编码的shapefile文件,如何在地图上给我的观测着色?我提供了一些假数据在链接http://pastebin.com/HsuQnLP3中。

enter image description here

谢谢


你是否已经有了将调查响应与空间数据(即地理编码)匹配的手段?如果是这样,您可以考虑将响应聚合到更大的空间尺度,类似于您在氯丙烷中看到的表示:http://blog.revolutionanalytics.com/2009/11/choropleth-challenge-result.html - user666993
我的建议是:在你的问题中添加一些真实数据或虚假数据的子集,这样我们就能够帮助你了。是的,使用ggplot进行这种操作可能是可行的;我已经做过很多次了。如果你还没有阅读过这篇文章,请先阅读。这个答案也可能相关。 - SlowLearner
@SlowLearner 你好,我刚刚添加了虚假数据。 - S12000
1
我认为我们需要一种将NPAs与州联系起来的方式,一种查找表,使我们能够确定NPA 1227是日内瓦州的一部分。然后,就可以将NPAs的结果聚合到州级别,并制作出相应的区域地图。目前,我们无法将NPAs分配到地图上。如果您拥有每个NPA中心的纬度和经度,那么这可能会起作用。 - SlowLearner
@SlowLearner 你好,我可以获取纬度和经度。然而,我不想将所有部分(例如1227)分配给一个州。我希望有一张地图,在这张地图上,所有的部分(在地图上呈正方形形状)都是某个州的一部分。在法语中,一个州的一部分通常被称为“commune”。 - S12000
显示剩余11条评论
1个回答

9

好的,有了shapefile文件,我们可以很容易地绘制图形。

work.dir <- "directory_name_no_trailing slash"

# open the shapefile
require(rgdal)
require(rgeos)
require(ggplot2)
ch <- readOGR(work.dir, layer = "PLZO_PLZ")

# convert to data frame for plotting with ggplot - takes a while
ch.df <- fortify(ch)

# generate fake data and add to data frame
ch.df$count <- round(runif(nrow(ch.df), 0, 100), 0)

# plot with ggplot
ggplot(ch.df, aes(x = long, y = lat, group = group, fill = count)) +
    geom_polygon(colour = "black", size = 0.3, aes(group = group)) +
    theme()

# or you could use base R plot
ch@data$count <- round(runif(nrow(ch@data), 0, 100), 0)
plot(ch, col = ch@data$count)

就我个人而言,我发现相比于 plotggplot 更易用,且其默认输出更为美观。

截图

ggplot 使用简单的数据框架,这使得数据子集的操作非常容易。

# plot just a subset of NPAs using ggplot
my.sub <- ch.df[ch.df$id %in% c(4,6), ]
ggplot(my.sub, aes(x = long, y = lat, group = group, fill = count)) +
    geom_polygon(colour = "black", size = 0.3, aes(group = group)) +
    theme()

结果:

截图2


非常感谢,它完美地运作了。这真的是我想要的。你让我的一天。 :) 然而,一些瑞士人可能会注意到一些湖泊的缺失,例如苏黎世的湖泊。我将写信给提供形状文件的网站,以便发现原因... - S12000
嗯,我认为人们不住在湖里,所以他们不会收到信件,那么就没有邮政编码了吧?请记住,这只是邮政区域的地图,而不是物理边界。 - SlowLearner
是的,办公室告诉我他们会尽快改善这个问题。然而,我尝试使用根据我的虚假数据绘制的情节 raw <- read.csv("http://pastebin.com/raw.php?i=HsuQnLP3", sep="\t")。但我无法弄清楚如何将 raw$NPA 与地图匹配。我可以通过生成随机变量来理解它,但对于真实数据却不行... - S12000
首先,示例数据有问题 - 我会得到一个“PRIMARY”键重复输入“2147483647”的错误。更重要的是,颜色区段地图(在本例中为NPAs)的重点是根据某些基础数据对它们进行着色。如果您的数据排列方式为“数字,性别,NPA”,那么您希望每个NPA的颜色代表什么?如果是性别,那只有两个值。您想显示调查编号吗? - SlowLearner
好的,谢谢。我会尝试解决这个问题。如果我找不到解决方案,我会创建一个新的帖子。 - S12000
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接