【问题标题】:R map switzerland according to NPA (locality)根据NPA(地区)的R地图瑞士
【发布时间】:2013-07-19 09:35:41
【问题描述】:

我计划在瑞士进行一项调查。将询问 NPA。

NPA (postal codes) 包含 4 个数字。

  • 例如 1227 是 Carouge 的 NPA(日内瓦州 - 瑞士的一部分)。
  • 例如 1784 年是 Courtepin 的 NPA(弗里堡州 - 瑞士的一部分)。

我想知道如何在地图上表示所有观测值(大约 1500 个)。我正在考虑使用 ggplot,因为我将它用于其他图表(我认为 ggplot 是“美丽的”)。不过,我愿意接受任何其他建议。

以下是一些虚假数据: http://pastebin.com/HsuQnLP3

瑞士地图的输出应该有点像美国地图(信用:http://www.openintro.org

更新:

我尝试创建一些代码:

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...

新更新:

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

我的 ZIP 文件名为:Shape LV03

那我试过了

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 上有 PLZ,我如何在地图上为我的观察着色? 我提供了一些关于数据的假数据http://pastebin.com/HsuQnLP3

谢谢

【问题讨论】:

  • 您是否已经有办法将您的调查回复与空间数据(即地理编码)相匹配?如果是这样,您可能会考虑将响应聚合到更大的空间尺度,类似于您所看到的叶绿素:blog.revolutionanalytics.com/2009/11/…
  • 我的建议:在您的问题中添加真实数据的子集或一些虚假数据,我们将能够提供帮助。是的,这种事情可能使用ggplot;我已经做过很多次了。如果您还没有阅读this post,请阅读。 This answer 也可能是相关的。
  • @SlowLearner 你好,我刚刚添加了假数据。
  • @JimM。抱歉,您能否根据我提供的虚假数据向我解释一下如何实现这一目标。我还不能理解...
  • 我认为我们需要某种方式将 NPA 与州联系起来,某种查找表允许我们确定 NPA 1227 是日内瓦州的一部分。然后,应该有可能将 NPA 的结果汇总到州级并对其进行汇总。目前我们无法将 NPA 分配给地图。如果你有每个 NPA 中心的纬度和经度,我猜这可能会起作用。

标签: r maps ggplot2


【解决方案1】:

好的,有了 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)

我个人觉得ggplotplot 更容易使用,而且默认输出更好看。

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()

结果:

【讨论】:

  • 非常感谢您正在完美地工作。真的是我想要的。你让我今天一整天都感觉很好。 :) 然而,一些瑞士人可能会注意到没有像苏黎世这样的湖泊。我会写信给提供形状文件的网站,以了解原因......
  • 好吧,我觉得人家不住在湖里,所以不会收到信,所以没有邮政编码吧?请记住,这只是邮政区域的地图,而不是物理边界。
  • 是的,办公室告诉我他们会尽快解决这个问题。但是,我很害怕,但我尝试根据我的假数据raw &lt;- read.csv("http://pastebin.com/raw.php?i=HsuQnLP3", sep="\t") 使用绘图。但我不知道如何将 raw$NPA 与地图匹配。我通过生成随机变量而不是真实数据来理解它......
  • 嗯,首先,示例数据有问题 - 我收到 Duplicate entry '2147483647' for key 'PRIMARY 错误。更重要的是,等值线的意义在于它根据一些基础数据为地图上的部分(在这种情况下是 NPA)上色。如果您的数据排列为Number,Gender,NPA,那么您希望每个 NPA 的颜色代表什么?如果是性别,那只有两个值。您希望它显示调查编号吗?
  • 您好,实际上我有兴趣按频率获取 NPA。例如,在我的假数据中,NPA 1197 的频率为 2,而 1223 只有 1。所以 1197 的形状会比 1223 的形状更暗。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多