使用geom_polygon

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

02. 将地图转成ggplot 对象处理 - 图1

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

02. 将地图转成ggplot 对象处理 - 图2

  1. > head(mymap_df)
  2. long lat order hole piece id group
  3. 1 1329152 5619034 1 FALSE 1 0 0.1
  4. 2 1323328 5628245 2 FALSE 1 0 0.1
  5. 3 1317709 5635382 3 FALSE 1 0 0.1
  6. 4 1314315 5641343 4 FALSE 1 0 0.1
  7. 5 1312338 5643597 5 FALSE 1 0 0.1
  8. 6 1311923 5644256 6 FALSE 1 0 0.1

这时候主要需要获取一下id 对应的省份名称:

  1. > df_map <- mymap@data[,c('PINYIN_NAM', 'NAME')]
  2. > df_map$id <- as.character(0:33)
  3. > head(df_map)
  4. PINYIN_NAM NAME id
  5. 0 Heilongjiang 黑龙江 0
  6. 1 Xinjiang Wei 新疆 1
  7. 2 Shanxi 山西 2
  8. 3 Ningxia Hui 宁夏 3
  9. 4 Xizang 西藏 4
  10. 5 Shandong 山东 5

接下来就可以按照省份快乐画图了:

  1. df_map <- mymap@data[,c('PINYIN_NAM', 'NAME')]
  2. df_map$id <- as.character(0:33)
  3. head(df_map)
  4. mymap_df <- fortify(mymap)
  5. head(mymap_df)
  6. df_map$PINYIN_NAM[33] <- "Macau"
  7. mymap_df_all <- merge(df_map, mymap_df, by = "id")
  8. ggplot(data = mymap_df_all, mapping = aes(x = long, y = lat)) +
  9. geom_polygon(colour = 'black', aes(fill = PINYIN_NAM)) +
  10. scale_fill_manual(values = map_pal) + theme(axis.text = element_blank(),
  11. axis.ticks = element_blank(),
  12. legend.title = element_blank()) +
  13. labs(x = "", y = "", title = "Template fot my ggplot", tag = "Fig. 1", caption = "By: Mug Peng")

02. 将地图转成ggplot 对象处理 - 图3

我们还可以获得每个省份的中间位置坐标,获得一个标记文件,比如各个省份的文盲率信息:

  1. p1 + geom_point(mapping = aes(x = longitude, y = latitude, size = Illiterate_rate), data = info_df, colour = 'red')

02. 将地图转成ggplot 对象处理 - 图4