0

我的目标是绘制这个由特定列着色的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(),每个条目存在五次。(见“订单”)。

调用str()“data.df”:

'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) 的情况下添加缺失的列,由于为多边形分配了错误的值,我会因为冗余条目而遇到麻烦。

我没有看到这种复制效果的原因?

4

1 回答 1

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

在此处输入图像描述

于 2016-02-23T18:48:12.383 回答