使用geom_polygon
mymap <- rgdal::readOGR("/Users/appe/Nutstore Files/01-dir_for_work/3-source/4.map/China/Province/省级行政区.shp")plot(mymap)map_pal <- paletteer_c("grDevices::Terrain 2", 40)[1:34]library(ggplot2)set_peng_theme()mymap2 <- ggplot(data = fortify(mymap)) +geom_polygon(aes(x = long, y = lat, group = id), colour = "black",fill = NA)mymap2 + theme(axis.text = element_blank(),axis.ticks = element_blank() ) + labs(x = "", y = "", title = "Template fot my ggplot", tag = "Fig. 1",caption = "By: Mug Peng")

但发现这个数据并不是很懂,很不方便后期进行处理。

> head(mymap_df)long lat order hole piece id group1 1329152 5619034 1 FALSE 1 0 0.12 1323328 5628245 2 FALSE 1 0 0.13 1317709 5635382 3 FALSE 1 0 0.14 1314315 5641343 4 FALSE 1 0 0.15 1312338 5643597 5 FALSE 1 0 0.16 1311923 5644256 6 FALSE 1 0 0.1
这时候主要需要获取一下id 对应的省份名称:
> df_map <- mymap@data[,c('PINYIN_NAM', 'NAME')]> df_map$id <- as.character(0:33)> head(df_map)PINYIN_NAM NAME id0 Heilongjiang 黑龙江 01 Xinjiang Wei 新疆 12 Shanxi 山西 23 Ningxia Hui 宁夏 34 Xizang 西藏 45 Shandong 山东 5
接下来就可以按照省份快乐画图了:
df_map <- mymap@data[,c('PINYIN_NAM', 'NAME')]df_map$id <- as.character(0:33)head(df_map)mymap_df <- fortify(mymap)head(mymap_df)df_map$PINYIN_NAM[33] <- "Macau"mymap_df_all <- merge(df_map, mymap_df, by = "id")ggplot(data = mymap_df_all, mapping = aes(x = long, y = lat)) +geom_polygon(colour = 'black', aes(fill = PINYIN_NAM)) +scale_fill_manual(values = map_pal) + theme(axis.text = element_blank(),axis.ticks = element_blank(),legend.title = element_blank()) +labs(x = "", y = "", title = "Template fot my ggplot", tag = "Fig. 1", caption = "By: Mug Peng")

我们还可以获得每个省份的中间位置坐标,获得一个标记文件,比如各个省份的文盲率信息:
p1 + geom_point(mapping = aes(x = longitude, y = latitude, size = Illiterate_rate), data = info_df, colour = 'red')

