trekking - Trazando grandes senderos de círculo
señalizacion de senderos ecologicos (1)
Esto es algo que comencé el año pasado y nunca llegué a pulir correctamente, pero espero que responda a su pregunta de unir puntos en un mapa con grandes líneas circulares, con la flexibilidad de personalizar líneas, círculos, etc.
Utilizo el paquete (my) rworldmap para el mapeo, el WDI para los datos del banco mundial y la geosfera para las líneas del gran círculo. El objetivo era trazar los flujos de ayuda de todos los países donantes a todos los países receptores (una parcela por donante). Debajo hay un diagrama de ejemplo, y debajo el código. Espero eso ayude. Sería bueno encontrar tiempo para recogerlo de nuevo! Andy
library(rworldmap)
library(WDI) # WORLD BANK INDICATORS
## lines of either type may obscure more than they add
##**choose line option here
addLines <- ''gc'' #''none''''straight'' ''gc''
if ( addLines == ''gc'' ) library(geosphere)
# setting background colours
oceanCol = rgb(7,0,30,maxColorValue=255)
landCol = oceanCol
#produces a list of indicator IDs and names as a matrix
indicatorList <- WDIsearch(''aid flows'')
#setting up a world map shaped plot window
#*beware this is windows specific
mapDevice(''windows'',width=10,height=4.5)
year <- 2000
#for(indNum in 1:2)
for(indNum in 1:nrow(indicatorList))
{
indID <- indicatorList[indNum][1]
donorISO3 <- substr(indID,start=8,stop=10)
dFdonor <- WDI(indicator=indID,start=year,end=year)
#divide by 10^6 for million dollars
dFdonor[indID] <- dFdonor[indID] * 1/10^6
sPDFdonor <- joinCountryData2Map(dFdonor,nameJoinColumn=''country'',joinCode=''NAME'')
#take out Antarctica
sPDFdonor <- sPDFdonor[-which(row.names(sPDFdonor)==''Antarctica''),]
legendTitle=paste("aid flow from",donorISO3,year,"(millions US$)")
mapBubbles(sPDFdonor, nameZSize=indID, plotZeroVals=FALSE, legendHoriz=TRUE, legendPos="bottom", fill=FALSE, legendTitle=legendTitle, oceanCol=oceanCol, landCol=landCol,borderCol=rgb(50,50,50,maxColorValue=255),lwd=0.5,lwdSymbols=1)
#removed because not working , main=paste(''donor'', donorISO3,year)
#now can I plot lines from the centroid of the donor to the centroids of the recipients
xDonor <- sPDFdonor$LON[ which(sPDFdonor$ISO3==donorISO3) ]
yDonor <- sPDFdonor$LAT[ which(sPDFdonor$ISO3==donorISO3) ]
xRecips <- sPDFdonor$LON[ which(sPDFdonor[[indID]] > 0) ]
yRecips <- sPDFdonor$LAT[ which(sPDFdonor[[indID]] > 0) ]
amountRecips <- sPDFdonor[[indID]][ which(sPDFdonor[[indID]] > 0) ]
## straight lines
if ( addLines == ''straight'' )
{
for(line in 1:length(xRecips))
{
#col <- ''blue''
#i could modify the colour of the lines by the size of the donation
#col=rgb(1,1,1,alpha=amountRecips[line]/max(amountRecips))
#moving up lower values
col=rgb(1,1,0,alpha=sqrt(amountRecips[line])/sqrt(max(amountRecips)))
lines(x=c(xDonor,xRecips[line]),y=c(yDonor,yRecips[line]),col=col, lty="dotted", lwd=0.5) #lty = "dashed", "dotted", "dotdash", "longdash", lwd some devices support <1
}
}
## great circle lines
## don''t work well when donor not centred in the map
## also the loop fails at CEC & TOT because not ISO3 codes
if ( addLines == ''gc'' & donorISO3 != "CEC" & donorISO3 != "TOT" )
{
for(line in 1:length(xRecips))
{
#gC <- gcIntermediate(c(xDonor,yDonor),c(xRecips[line],yRecips[line]), n=50, breakAtDateLine=TRUE)
#30/10/13 lines command failed with Error in xy.coords(x, y) :
#''x'' is a list, but does not have components ''x'' and ''y''
#adding sp=TRUE solved
gC <- gcIntermediate(c(xDonor,yDonor),c(xRecips[line],yRecips[line]), n=50, breakAtDateLine=TRUE, sp=TRUE)
#i could modify the colour of the lines by the size of the donation
#col=rgb(1,1,1,alpha=amountRecips[line]/max(amountRecips))
#moving up lower values
col=rgb(1,1,0,alpha=sqrt(amountRecips[line])/sqrt(max(amountRecips)))
lines(gC,col=col,lwd=0.5)
}
}
#adding coasts in blue looks nice but may distract
data(coastsCoarse)
plot(coastsCoarse,add=TRUE,col=''blue'')
#repeating mapBubbles with add=T to go on top of the lines
mapBubbles(sPDFdonor, nameZSize=indID, plotZeroVals=FALSE, fill=FALSE, addLegend=FALSE, add=TRUE, ,lwd=2)
#removed because not working : , main=paste(''donor'', donorISO3,year)
#looking at adding country labels
text(xRecips,yRecips,sPDFdonor$NAME[ which(sPDFdonor[[indID]] > 0) ],col=rgb(1,1,1,alpha=0.3),cex=0.6,pos=4) #pos=4 right (1=b,2=l,3=ab)
#add a title
nameDonor <- sPDFdonor$NAME[ which(sPDFdonor$ISO3==donorISO3) ]
mtext(paste("Aid flow from",nameDonor,year), cex = 1.8, line=-0.8)
#savePlot(paste("C://rProjects//aidVisCompetition2012//Rplots//greatCircles//wdiAidFlowLinesDonor",donorISO3,year,sep=''''),type=''png'')
#savePlot(paste("C://rProjects//aidVisCompetition2012//Rplots//greatCircles//wdiAidFlowLinesDonor",donorISO3,year,sep=''''),type=''pdf'')
} #end of indNum loop
Intento trazar algunos mapas basados en ruta / conexión pero no puedo descubrir cómo.
Veo muchas posibilidades de métricas basadas en un punto (zonas críticas de delitos en Londres, etc. con googleVis, ggmap, etc.) pero no puedo encontrar muchos ejemplos de métricas basadas en dos puntos (inmigraciones entre ciudades, rutas de trenes, etc. .) Hay un ejemplo con la geosphere
del paquete, pero parece no estar disponible para R 3.0.2
.
Idealmente, me gustaría algo como este ejemplo D3 y también me gustaría personalizar el grosor, el color, etc. de las líneas y los círculos.
PD: No creo que rCharts
pueda hacer esto todavía, ¿no?