如何使用KML数据源中的ggplot2绘制一个等值区或专题图?
示例KML:https://dl.dropbox.com/u/1156404/nhs_pct.kml
示例数据:https://dl.dropbox.com/u/1156404/nhs_dent_stat_pct.csv
这是我到目前为止所得到的:
install.packages("rgdal")
library(rgdal)
library(ggplot2)
fn='nhs_pct.kml'
#Look up the list of layers
ogrListLayers(fn)
#The KML file was originally grabbed from Google Fusion Tables
#There's only one layer...but we still need to identify it
kml=readOGR(fn,layer='Fusiontables folder')
#This seems to work for plotting boundaries:
plot(kml)
#And this:
kk=fortify(kml)
ggplot(kk, aes(x=long, y=lat,group=group))+ geom_polygon()
#Add some data into the mix
nhs <- read.csv("nhs_dent_stat_pct.csv")
kml@data=merge(kml@data,nhs,by.x='Name',by.y='PCT.ONS.CODE')
#I think I can plot against this data using plot()?
plot(kml,col=gray(kml@data$A.30.Sep.2012/100))
#But is that actually doing what I think it's doing?!
#And if so, how can experiment using other colour palettes?
#But the real question is: HOW DO I DO COLOUR PLOTS USING gggplot?
ggplot(kk, aes(x=long, y=lat,group=group)) #+ ????
所以我的问题是:如何使用例如kml@data$A.30.Sep.2012值为区域着色?
作为一个补充问题:我如何再次在ggplot上下文中尝试不同的调色板?
答案 0 :(得分:5)
在R中绘制地图通常很痛苦。这是一个答案,主要遵循Hadley在https://github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles
的教程library(maptools)
library(rgdal)
library(ggplot2)
library(plyr)
fn='nhs_pct.kml'
nhs <- read.csv("nhs_dent_stat_pct.csv")
kml <- readOGR(fn, layer="Fusiontables folder")
注意:我收到了一个关于孤儿漏洞的消息。阅读https://stat.ethz.ch/pipermail/r-help/2011-July/283281.html
后,我收录了以下内容slot(kml, "polygons") <- lapply(slot(kml, "polygons"), checkPolygonsHoles)
## The rest more or less follows Hadley's tutorial
kml.points = fortify(kml, region="Name")
kml.df = merge(kml.points, kml@data, by.x="id",by.y="Name",sort=FALSE)
kml.df <- merge(kml.df,nhs,by.x="id",by.y="PCT.ONS.CODE",sort=FALSE,all.x=T,all.y=F)
## Order matters for geom_path!
kml.df <- kml.df[order(kml.df$order),]
nhs.plot <- ggplot(kml.df, aes(long,lat,group=group,fill=A.30.Sep.2012)) +
geom_polygon() +
geom_path(color="gray") +
coord_equal() +
scale_fill_gradient("The outcome") +
scale_x_continuous("") + scale_y_continuous("") + theme_bw()