Я делаю карту крупнейших городов Китая с точки зрения населения, используя ggplot2.
Исходный набор данных находился в шейп-файле, поэтому я использовал readOGR для преобразования данных в векторный объект Spatial, а затем, используя fortify, превратил карту в фрейм данных, чтобы можно было использовать ggplot2.
My Основная проблема заключалась в том, что при использовании geom_label метки продолжали перекрывать друг друга, поэтому я переключился на geom_label_repel, но теперь некоторые метки городов размещаются вне карты. Есть ли способ заставить geom_label_repel сохранить метки внутри карты?
Ура!
library(rgdal)
library(raster)
library(ggplot2)
ctry_spdf <- readOGR(dsn=".",layer="COUNTRIES_ALL",verbose=F)
china<-subset(ctry_spdf,ctry_spdf@data$CNTRY_NAME=="China")
cities <- readOGR(dsn=".",layer="cities")
chinese_cities <- intersect(cities,china)
china_df<-fortify(china, region="OBJECTID")
china_ff <- merge(china_df, china@data, by.x = "id", by.y = "OBJECTID")
cities_df <- as(chinese_cities, "data.frame")
plot_china<- c(geom_polygon(data=china_ff, aes(long, lat, group = group)))
plot_cities<-c(geom_point(data=cities_df,aes(x=POINT_X, y=POINT_Y,col="red")))
#plot_labels<-c(geom_label(data=cities_df,aes(x=POINT_X, y=POINT_Y,label=CITY_NAME))) --previous
methodology overlapping
plot_labels<-c(geom_label_repel(
arrow = arrow(length = unit(0.03, "npc"), type = "closed", ends = "first"),
force = 10,
data=cities_df,aes(x=POINT_X, y=POINT_Y,label=CITY_NAME) ) )
ggplot()+plot_china+plot_cities+plot_labels+coord_equal() + labs(title = "China", x = "long", y =
"lat", color = "City") +scale_color_manual(labels = c("Big Cities"), values = c("red"))
См. Карту здесь