Mi piacerebbe fare una mappa dei Paesi Bassi con linee curve tra le città. Ho due dataframes numero uno chiamato: df_verticles
che contiene 24 città con la loro combinazione lat/lon. Il secondo dataframe chiamato: df
voglio usare per tracciare una linea curva tra lat/lon dalla combinazione alla lat/lon alla combinazione.Disegna linee curve in ggmap, geom_curve non funziona
> head(df_vertices)
city AmountSessions totalkWh AmountRFID scaledAmount scaledkWh Latitude Longitude
1 Alkmaar 13608 104554.68 1326 0.07139012 0.026941910 52.63903 4.755538
2 Almere 11281 100841.42 930 0.05006999 0.025985067 52.39447 5.282043
3 Amersfoort 7719 67663.30 1198 0.06449876 0.017435647 52.15108 5.383069
4 Amstelveen 25794 236437.93 2616 0.14084204 0.060925915 52.31724 4.859266
5 Amsterdam 402365 3880744.86 18574 1.00000000 1.000000000 52.34560 4.808834
> head(df)
CityChargeSessions NextCity Amount sumkWh scaledAmount scaledkWh Latitude_from Longitude_from Latitude_to Longitude_to
1 Amsterdam Alkmaar 1058 8133.736 0.18438480 0.15480933 52.34560 4.808834 52.63903 4.755538
2 Amsterdam Almere 998 7254.133 0.17392820 0.13806786 52.34560 4.808834 52.39447 5.282043
3 Amsterdam Amersfoort 566 4977.404 0.09864064 0.09473489 52.34560 4.808834 52.15108 5.383069
4 Amsterdam Amstelveen 3724 24210.289 0.64900662 0.46079423 52.34560 4.808834 52.31724 4.859266
5 Almere Amsterdam 1034 8685.526 0.18020216 0.16531155 52.39447 5.282043 52.34560 4.808834
6 Amersfoort Amsterdam 579 4936.823 0.10090624 0.09396251 52.15108 5.383069 52.34560 4.808834
Normalmente ggmap è solo un sottostrato di un ggplot così ho deciso di tracciare la mia trama desiderata prima in ggplot:
ggplot_curve<- ggplot()+
geom_text(data=df_vertices, aes(x = Longitude, y = Latitude+0.025, label = df_vertices$city), size=6)+
geom_point(aes(x = Longitude, y = Latitude, size=scaledkWh), colour="red", data = df_vertices, alpha =0.5)+
scale_size_continuous(range=c(1,30))+
geom_curve(data=df, aes(x=Longitude_from, y=Latitude_from, xend=Longitude_to, yend=Latitude_to),
arrow=arrow(angle=15,ends="first",length=unit(0.7,"cm"),type="closed"), size= df$scaledAmount,alpha=0.5, curvature = 0.15)+
theme_bw()
Questo è esattamente quello che voglio, ora ho appena vuoi aggiungere la ggmap desiderata come sottostrato.
Ora devo solo sostituire ggplot() da ggmap
ggmap_with_curve<- ggmap(map)+
geom_point(aes(x = Longitude, y = Latitude, size=scaledkWh), colour="red", data = df_vertices, alpha =0.5)+
scale_size_continuous(range=c(1,30))+
geom_curve(data=df, aes(x=Longitude_from, y=Latitude_from, xend=Longitude_to, yend=Latitude_to),
arrow=arrow(angle=15,ends="first",length=unit(0.7,"cm"),type="closed"), size= df$scaledAmount,alpha=0.5, curvature = 0.15)
Come potete vedere questo non è il risultato desiderato ho sperato, R mi ha dato questo messaggio di errore:
geom_curve non è implementato per le coordinate non lineari.
Ho provato a google, ma non ho risolto il problema.
Quindi la mia domanda come ottengo questo output ggplot con la mappa desiderata come sottostrato. Qualcuno può aiutarmi?
sembra che si potrebbe essere bloccato rendere la vostra mappa utilizzando i propri dati geografici con una proiezione lineare sistema di coordinate. A meno che qualcuno non conosca una soluzione alternativa diversa? Ciò comporterebbe la creazione dei file di base che desideri e la loro proiezione in un sistema lineare 2D che funzioni per il tuo schermo (minimizza la distorsione nei modi che desideri) e usando [base ggplot2] (https://github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles) funzioni per creare la mappa. –