使用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 group
1 1329152 5619034 1 FALSE 1 0 0.1
2 1323328 5628245 2 FALSE 1 0 0.1
3 1317709 5635382 3 FALSE 1 0 0.1
4 1314315 5641343 4 FALSE 1 0 0.1
5 1312338 5643597 5 FALSE 1 0 0.1
6 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 id
0 Heilongjiang 黑龙江 0
1 Xinjiang Wei 新疆 1
2 Shanxi 山西 2
3 Ningxia Hui 宁夏 3
4 Xizang 西藏 4
5 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')