R карта Швейцарии по NPA (населенный пункт)

Я планирую провести опрос в Швейцарии. NPA будет предложено.

NPA (почтовые индексы) содержит 4 числа.

  • например, 1227 является NPA Каруж (часть кантона Женева-Швейцария).
  • например, 1784 является NPA Courtepin (часть кантона Фрибург-Швейцария).
  • etc.

Я хотел бы знать, как представляют все наблюдения (около 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 коммун...

обновление:

Я нашел (спасибо @yrochat) шейп-файл с NPA: http://www.cadastre.ch/internet/cadastre/fr/home/products/plz/data.html

I'TS 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

поскольку у меня есть PLZ в шейп-файле, как мне раскрасить мое наблюдение на карте? Я предоставил некоторые поддельные данные по данным http://pastebin.com/HsuQnLP3

enter image description here

спасибо

1 ответов


хорошо, с шейп-файлом мы можем достаточно легко построить сюжет.

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)

лично мне ggplot намного проще работать, чем plot и выход по умолчанию намного лучше выглядит.

screenshot

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

результат:

screenshot2