how to plot networks over a map with the least overlap

后端 未结 2 1913
广开言路
广开言路 2021-02-03 23:19

I have some authors with their city or country of affiliation. I would like to know if it is possible to plot the coauthors\' networks (figure 1), on the map, having the coordin

2条回答
  •  深忆病人
    2021-02-03 23:57

    As an effort to avoid the overlapping of the 2 networks, I came to this modification of the x and y coordenates of the ggplot, which by default does not overlap the networks, see figure 1 in the question.

    # get centroid positions for countries
    # add coordenates to authorcountry table
    
    # download and unzip
    # https://worldmap.harvard.edu/data/geonode:country_centroids_az8
    setwd("~/country_centroids_az8")
    library(rgdal)
    cent <- readOGR('.', "country_centroids_az8", stringsAsFactors = F)
    countrycentdf<-cent@data[,c("name","Longitude","Latitude")]
    countrycentdf$name[which(countrycentdf$name=="United States")]<-"USA"
    colnames(countrycentdf)[names(countrycentdf)=="name"]<-"country"
    
    authorcountry$Longitude<-countrycentdf$Longitude[match(authorcountry$country,countrycentdf$country)]
    authorcountry$Latitude <-countrycentdf$Latitude [match(authorcountry$country,countrycentdf$country)]
    
    # original coordenates of plot and its transformation
    ggnetbuild<-ggplot_build(gdata)
    allcoord<-ggnetbuild$data[[3]][,c("x","y","label")]
    allcoord$Latitude<-authorcountry$Latitude [match(allcoord$label,authorcountry$author)]
    allcoord$Longitude<-authorcountry$Longitude [match(allcoord$label,authorcountry$author)]
    allcoord$country<-authorcountry$country [match(allcoord$label,authorcountry$author)]
    
    # increase with factor the distance among dots
    factor<-7
    allcoord$coord_lat<-allcoord$y*factor+allcoord$Latitude
    allcoord$coord_lon<-allcoord$x*factor+allcoord$Longitude
    allcoord$author<-allcoord$label
    
    # plot as in answer of JanLauGe, without jitter
    library(tidyverse)
    library(ggrepel)
      authors <- 
        # Get author numbers
        data_frame(
          id = seq(1, nrow(coauthors)),
          author = sapply(bip$val, function(x) x$vertex.names)) %>%
        left_join(
          allcoord,
          by = 'author') 
    
      # Continue as in answer of JanLauGe
      networkdata <- ## 
      dt <- ## 
      world_map <- map_data('world') 
      myMap <- ## 
      myMap
    

提交回复
热议问题