在带有网格的地图中穿越的线条(ggplot)

时间:2018-05-02 01:35:44

标签: r ggplot2 grid maps

我在使用R创建的地图时遇到了困难。我正在尝试使用网格制作地图,其中每个正方形中都有一个与数据框对应的值。到目前为止,我在这里制作了shapefile和脚本以及一些教程和帖子(Download),但最终的结果有点奇怪。

library(xlsx)
library(ggplot2)
library(sp)
library(raster)
library(plyr)
library(dplyr)
library(tidyr)
library(sp)
library(raster)
library(rgeos)
library(rgbif)
library(viridis)
library(gridExtra)
library(rasterVis)
library(ggplot2)
library(maps)
library(rgdal)

br <- readOGR(choose.files(), "brgrid")
plot(br)
class(br)
str(br@data)
br@data$id <- rownames(br@data)
br.df <- fortify(br)
br.df <- join(br.df, br@data, by="id")
str(br.df)
tail(br.df)
names(br.df)
tail(br.df$id)

dados <- read.xlsx("ptsgrid.xlsx",6)
names(dados)

br.df <- merge(br.df, dados, by.x="id", by.y="id", all.x=T, a..ly=F)
str(br.df)

ggp <- ggplot(data=br.df, aes(x=long, y=lat, group=group)) 
ggp <- ggp + geom_polygon(aes(fill=value))         # draw polygons
ggp <- ggp + geom_path(color="grey", linestyle=1)  # draw boundaries
ggp <- ggp + coord_equal() 
ggp <- ggp + scale_fill_gradient(low = "#ffffcc", high = "#ff4444", 
                                 space = "Lab", na.value = "grey50",
                                 guide = "colourbar")
print(ggp)

Image

我想知道为什么线条在地图中划过,以及如何修复它。另外,我想知道是否可以省略一些正方形(我只对沿海地区感兴趣,所以如果我省略其余部分它会更好看)。最后,我不知道为什么地图边界被“叠加”(可能是投影问题?)。

2 个答案:

答案 0 :(得分:1)

欢迎使用Stack Overflow!到目前为止你做了什么/你的代码是什么样的?我将与您分享我按照我的意图制作的地图/代码,因此您可以将代码中的值替换为您需要的数据/使用您的数据下面是我在R中创建的地图的代码美国:

library(maps)
library(ggplot2)
usa=map_data("state")

ggplot(usa)+geom_polygon(aes(x=long,y=lat,group=group,fill=region),color="white")+coord_fixed(1.3)+guides(fill=FALSE,color=FALSE)

以上代码的结果: Result of code

答案 1 :(得分:0)

我下载了你的数据集。我没有检查你的代码。但是我想当你使用br.df创建merge()时,order搞砸了。在您的代码中,我正在谈论这一行(br.df<-merge(br.df, dados, by.x="id", by.y="id", all.x=T, a..ly=F)。您可以查看this question。您想要组合所有数据集。但你不必这样做。

在您的数据集dados中,您有148个数据点。但是你的地图数据中有150个网格。所以我修改了你的EXCEL数据;我添加了id = 0和id = 149.每个数据点分别有0和495。只要存在公共列名称(在本例中为id),您就可以执行以下操作。我在ggalt包中使用了geom_cartogram()。第二个geom_cartogram()是为网格添加颜色。

library(rgdal)
library(ggplot2)
library(ggalt)
library(readxl)

# Create a map data
foo <- readOGR(dsn = "brgrid.shp")
mygrid <- fortify(foo)

# Import the EXCEL data
dados <- read_excel("ptsgrid.xlsx", sheet = 6)

ggplot() +
geom_cartogram(data = mygrid, map = mygrid, 
               aes(x = long, y = lat, map_id = id), 
               color = "black", alpha = 0.5) +
geom_cartogram(data = dados, map = mygrid, 
               aes(fill = value, map_id = id)) +
scale_fill_gradient(low = "#ffffcc", high = "#ff4444", 
                    space = "Lab", na.value = "grey50",
                    guide = "colourbar")

enter image description here