1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| setwd("C:\\Users\\jlzhang\\20180604") #### 导入所需要的程序包library(maptools) ## Loading required package: sp ## Checking rgeos availability: TRUE library(ggplot2) library(rgdal) ## rgdal: version: 1.3-1, (SVN revision 747) ## Geospatial Data Abstraction Library extensions to R successfully loaded ## Loaded GDAL runtime: GDAL 2.2.3, released 2017/11/20 ## Path to GDAL shared files: C:/Users/jlzhang/Documents/R/win-library/3.5/rgdal/gdal ## GDAL binary built with GEOS: TRUE ## Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493] ## Path to PROJ.4 shared files: C:/Users/jlzhang/Documents/R/win-library/3.5/rgdal/proj ## Linking to sp version: 1.2-7 rm(list = ls()) ## 删除所有对象
## 去过的地方 provinces_visited <- c("Beijing", "Hebei", "Heilongjiang", "Liaoning", "Jilin", "Jiangxi", "Hunan", "Zhejiang", "Hubei", "Chongqing", "Sichuan", "Henan", "Guangxi", "Guangdong", "Fujian", "Hainan", "Yunnan", "Guizhou") provinces_visited_df <- data.frame(province_pinyin = provinces_visited, visited_status = rep("Visited", length(provinces_visited)))
## 读取地图 country <- readOGR("bou1_4l.shp") ## OGR data source with driver: ESRI Shapefile ## Source: "C:\Users\jlzhang\20180604\bou1_4l.shp", layer: "bou1_4l" ## with 1382 features ## It has 8 fields ## Integer64 fields read as strings: FNODE_ TNODE_ LPOLY_ RPOLY_ BOU1_4M_ BOU1_4M_ID province <- readOGR("province_polygon.shp") ## 各省多边形 ## OGR data source with driver: ESRI Shapefile ## Source: "C:\Users\jlzhang\20180604\province_polygon.shp", layer: "province_polygon" ## with 34 features ## It has 10 fields province$ID <- as.character(province$ID)
## 转换为ggplot2绘图用的data.frame country_df <- fortify(country) province_df <- fortify(province) ## Regions defined for each Polygons ## 提取省级数据中的信息 province_dat <- province@data
## 改正省级数据中关于香港和澳门的错误 index_HK <- which(province_dat$ID == "Xianggang") province_dat$X[index_HK] <- 114.156121 province_dat$Y[index_HK] <- 22.37725 province_dat$ID[index_HK] <- "Hong Kong"
index_MC <- which(province_dat$ID == "Aomen") province_dat$X[index_MC] <- 113.545681 province_dat$Y[index_MC] <- 20.197303 province_dat$ID[index_MC] <- "Macau"
## id与province_df数据表中的省出现的顺序相同, 这里id都从0开始, 所以需要减去1,以便匹配 province_dat$id <- as.character(1:nrow(province_dat) - 1)
## 增加省拼音 province_dat2 <- merge(province_dat, provinces_visited_df, by.x = "ID", by.y = "province_pinyin", all.x = TRUE)
## 由于visited status 默认是 factor 类型, 这里需要先转换为字符串, 再处理 province_dat2$visited_status <- as.character(province_dat2$visited_status)
## 所有没有匹配上的省份都是没有去过的, 状态为 not yet province_dat2$visited_status[is.na(province_dat2$visited_status)] <- "Not Yet" province_df_merged <- merge(province_df, province_dat2, by = "id") ## 绘图 ## 用geom_path绘制读取的polyline,因为国界线是polyline ## 多圆锥投影 ## http://desktop.arcgis.com/zh-cn/arcmap/10.3/guide-books/map-projections/polyconic.htm
ggplot() + geom_path(data = country_df, aes(x = long, y = lat, group=group), colour="darkblue") + coord_map("polyconic") + geom_polygon(data = province_df_merged, aes(x = long, y = lat, group=group, fill = visited_status), colour="grey") + geom_text(mapping = aes(x = X, y = Y, label = ID), data = province_dat, colour = 'Black')+ ggtitle("Provinces I have been to:") + xlab("Longitude") + ylab("Latitude") + theme(legend.position = "bottom") + scale_fill_discrete(name = "Province")
|