2017-10-09 2 views
2

Je fais des cartes du monde avec le paquet "rworldmap". J'utilise une fonction pour accéder aux données commerciales de UN Comtrade.Comment faire une carte du monde en R sans Antarctique?

J'ai édité ma question originale afin que je puisse montrer un vrai exemple de ce que je fais. Voici une carte que je pouvais faire:

library(rjson) 
library(rworldmap) 

get.Comtrade <- function(url="http://comtrade.un.org/api/get?" 
        ,maxrec=50000 
        ,type="C" 
        ,freq="A" 
        ,px="HS" 
        ,ps="now" 
        ,r 
        ,p 
        ,rg="all" 
        ,cc="TOTAL" 
        ,fmt="json" 
) 
{ 
string<- paste(url 
      ,"max=",maxrec,"&" #maximum no. of records returned 
      ,"type=",type,"&" #type of trade (c=commodities) 
      ,"freq=",freq,"&" #frequency 
      ,"px=",px,"&" #classification 
      ,"ps=",ps,"&" #time period 
      ,"r=",r,"&" #reporting area 
      ,"p=",p,"&" #partner country 
      ,"rg=",rg,"&" #trade flow 
      ,"cc=",cc,"&" #classification code 
      ,"fmt=",fmt  #Format 
      ,sep = "" 
) 

if(fmt == "csv") { 
raw.data<- read.csv(string,header=TRUE) 
return(list(validation=NULL, data=raw.data)) 
} else { 
if(fmt == "json") { 
    raw.data<- fromJSON(file=string) 
    data<- raw.data$dataset 
    validation<- unlist(raw.data$validation, recursive=TRUE) 
    ndata<- NULL 
    if(length(data)> 0) { 
    var.names<- names(data[[1]]) 
    data<- as.data.frame(t(sapply(data,rbind))) 
    ndata<- NULL 
    for(i in 1:ncol(data)){ 
     data[sapply(data[,i],is.null),i]<- NA 
     ndata<- cbind(ndata, unlist(data[,i])) 
    } 
    ndata<- as.data.frame(ndata) 
    colnames(ndata)<- var.names 
    } 
    return(list(validation=validation,data =ndata)) 
} 
} 
} 

dt2 <- get.Comtrade(r=32, p="all", rg=1, fmt="csv") 
dt2df <- as.data.frame(do.call(rbind, dt2)) 
total=sum(dt2df$Trade.Value..US..) 
dt2df$p <- 100*dt2df$Trade.Value..US../total 
dt2df <- dt2df[order(-dt2df[,"p"]),] 

top3 <- dt2df[4,"p"] 
top10 <- dt2df[11,"p"] 
q3 <- dt2df[as.integer(1*nrow(dt2df)/4),"p"] 
q2 <- dt2df[as.integer(2*nrow(dt2df)/4),"p"] 
q1 <- dt2df[as.integer(3*nrow(dt2df)/4),"p"] 

mapped_data <- joinCountryData2Map(dt2df, joinCode = "ISO3", 
           nameJoinColumn = "Partner.ISO") 

mapCountryData(mapped_data, nameColumnToPlot = "p", numCats=6, catMethod = 
c(0,q1,q2,q3,top10,top3,100), colourPalette = 
c('cornsilk','cornsilk2','palegreen1','palegreen2','palegreen4','darkgreen'), mapTitle="", addLegend=FALSE) 

Le résultat est la carte que je suis à la recherche, sauf que je ne ai pas besoin de voir l'Antarctique. Comment puis-je l'enlever?

J'ai essayé avec xlim & ylim, mais cela n'a pas fonctionné.

Répondre

3

Essayez new_world <- subset(mapped_data, continent != "Antarctica")

après

mapped_data <- joinCountryData2Map(dt2df, joinCode = "ISO3", nameJoinColumn = "Partner.ISO")

continuer

mapCountryData(new_world, nameColumnToPlot = "p", numCats=6, catMethod = 
c(0,q1,q2,q3,top10,top3,100), colourPalette =  c('cornsilk','cornsilk2','palegreen1','palegreen2','palegreen4','darkgreen'), mapTitle="", addLegend=FALSE)