使用ggplot和R使用多边形剪切轮廓

时间:2013-01-17 06:25:58

标签: r map ggplot2

我想创建一个轮廓,然后用多边形剪切轮廓,只显示多边​​形内的轮廓。

可以找到Shapefile数据here

可以找到Csv文件here

我使用的代码如下:

library("ggplot2")
library("rgdal")
library("gpclib")
library("maptools")
require(sp) 

age2100 <- read.csv("temp.csv",header=TRUE, sep=",")
shape.dir <- "C:/Users/jdbaba/Documents/R working folder/shape" # use your directory name here

lon.shape <- readOGR(shape.dir, layer = "Export_Output_4")
str(lon.shape)

lon.df <- fortify(lon.shape, region = "Id")
p <- ggplot(lon.df, aes(x = long, y = lat, group = group)) +
    geom_polygon(colour = "black", fill = "grey80", size = 1) +
    theme() 

p <- p + geom_point(data=age2100,aes(x=age2100$x,y=age2100$y,group="z"),size=0.1)
p <- p + geom_density2d(colour="red")
p

在这里,我创建了地图,点和轮廓。我不知道我使用的代码是否为变量z创建了轮廓。如果不正确可以有人建议我吗?

我得到的样本输出如下:

enter image description here

现在,我想剪切多边形内的轮廓并隐藏多边形外部的轮廓部分。

我想知道如何将标签添加到轮廓并控制轮廓间隔。

如果我的问题不明确,请告诉我。

谢谢

Jdbaba

1 个答案:

答案 0 :(得分:2)

我无法准确地重现您的地图。你提供的代码给了我一张带有两组轮廓的地图 - 一个看起来像你的轮廓,另一个在区域的南部重叠。我怀疑这是你group设置的人工制品。此外,我可以看到在我认为是湖的南部有一个岛屿。

enter image description here

我喜欢清理并将我的ggplot内容划分为多个位,因为我经常在ggplot调用的早期部分发现某些东西会在后面的部分中混淆。这是我如何绘制区域,绘制点,然后添加密度轮廓:

map <- function(){
  geom_polygon(data=lon.df,aes(x=long,y=lat,group=piece),colour="black",fill="grey80",size=1)
}

points <- function(){
  geom_point(data=age2100,aes(x=x,y=y),size=0.1)
}

density <- function(){
  geom_density2d(data=age2100,aes(x=x,y=y),colour="red")
}

ggplot()+map() +points() +density()

这给出了这个:

enter image description here

现在这与你的轮廓看起来有很大不同,我不知道为什么。也许你的group参数是用相同的z对所有点进行分组?

无论如何,您似乎不想要密度图,您想要在您的区域上绘制Z值的地图。这将需要克里金法或其他一些插值技术。忘记ggplot一段时间,专注于数字。

对于初学者,绘制由z值着色的点。你应该看到这个:

enter image description here

至少可以让你很好地了解正确的轮廓是什么样的。

无论如何,这是一个全面的教程..