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