我的目标是将此shapefile绘制为特定列。
它包含100个多边形。我对其应用了fortify()
并加入了一些缺失的列
# convert SpPolyDaFrame into normal dataFrame for plotting
data.df = fortify(data)
# join missing columns
data@data$id = rownames(data@data)
data.df$perc_ch = data@data$perc_ch
data.df = left_join(data.df, data@data, by=c('id'='id'))
调用fortify()
后,每个条目都存在五次。 (参见'命令')。
在数据文件号码<{1}上调用str()
:
'data.frame': 500 obs. of 11 variables:
$ long : num 421667 421667 416057 416057 421667 ...
$ lat : num 8064442 8060421 8060421 8064442 8064442 ...
$ order : int 1 2 3 4 5 1 2 3 4 5 ...
$ hole : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ piece : Factor w/ 1 level "1": 1 1 1 1 1 1 1 1 1 1 ...
$ id : chr "0" "0" "0" "0" ...
$ group : Factor w/ 100 levels "0.1","1.1","2.1",..: 1 1 1 1 1 2 2 2 2 2 ...
$ perc_ch.x: num 17.4 11.4 20.5 12 15 ...
$ z : int 1 1 1 1 1 2 2 2 2 2 ...
$ Ch_area : num 3914498 3914498 3914498 3914498 3914498 ...
$ perc_ch.y: num 17.4 17.4 17.4 17.4 17.4 ...
这是由fortify()
引入的。但是,只要基于匹配列(= perc_ch.y)加入缺少的列,它就不会更改绘图结果。
如果我添加缺少列而没有匹配的索引(= perc_ch.x),由于冗余条目,我会遇到麻烦,因为错误的值被分配给多边形。
我没有看到这种复制效果的原因?
答案 0 :(得分:0)
无需将数据绑定到多边形:
library(rgeos)
library(maptools)
library(rgdal)
URL <- "https://www.dropbox.com/s/rsr49jwm1pf9abu/data.zip?dl=1"
fil <- "sodata.zip"
if (!file.exists(fil)) download.file(URL, fil)
fils <- unzip(fil)
shp <- grep("shp$", fils, value=TRUE)
geo <- readOGR(shp, ogrListLayers(shp)[[1]], stringsAsFactors=FALSE, verbose=FALSE)
geo_map <- fortify(geo, region="z")
gg <- ggplot()
gg <- gg + geom_map(data=geo_map, map=geo_map,
aes(x=long, y=lat, map_id=id),
color=NA, size=0, fill=NA)
gg <- gg + geom_map(data=geo@data, map=geo_map,
aes(fill=perc_ch, map_id=z),
color="#2b2b2b", size=0.15)
gg <- gg + viridis::scale_fill_viridis()
gg <- gg + ggthemes::theme_map()
gg <- gg + theme(legend.position="right")
gg