2016-04-08 12 views
6

काम नहीं कर रहा है मैं नीदरलैंड का नक्शा शहरों के बीच घुमावदार लाइनों के साथ बनाना चाहता हूं। मेरे पास दो डेटाफ्रेम नंबर हैं जिन्हें एक कहा जाता है: df_verticles जिसमें 24 अक्षरों को उनके लेट/लोन संयोजन के साथ शामिल किया गया है। दूसरा डेटाफ्रेम कहा जाता है: df मैं संयोजन से लेट/लोन के संयोजन से लैट/लोन के बीच घुमावदार रेखा खींचने के लिए उपयोग करना चाहता हूं।ggmap में घुमावदार रेखाएं खींचे, geom_curve

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() 

enter image description here

यह ठीक है मैं क्या चाहते हैं, मैं अभी-अभी:

> 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 

आम तौर पर ggmap सिर्फ एक ggplot के underlayer तो मैं ggplot में पहली मेरी वांछित साजिश साजिश करने का फैसला किया है वांछित ggmap अंडरलेयर के रूप में जोड़ना चाहते हैं।

:

अब मैं सिर्फ ggplot() 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) 

enter image description here

से आप देख सकते हैं इस वांछित आउटपुट मैं के लिए उम्मीद थी नहीं है की जगह, आर मुझे यह त्रुटि संदेश दिया

geom_curve गैर-रैखिक निर्देशांक के लिए लागू नहीं किया गया है।

मैंने इसे Google पर करने का प्रयास किया, लेकिन मैंने इसे स्वयं ठीक नहीं किया।

तो मेरा सवाल है कि मैं वांछित मानचित्र के साथ अंडरलेयर के रूप में यह ggplot आउटपुट कैसे प्राप्त करूं। क्या कोई मेरी मदद कर सकता हैं?

+0

ऐसा लगता है आप की तरह एक अनुमान, रैखिक के साथ अपने स्वयं भौगोलिक डेटा का उपयोग कर समन्वय प्रणाली अपने नक्शे बनाने अटक सकता है। जब तक किसी को एक अलग कामकाज के बारे में पता नहीं है? इसमें आपकी इच्छित मूल फाइलें बनाना और उन्हें 2 डी रैखिक प्रणाली में पेश करना शामिल होगा जो आपके प्रदर्शन के लिए काम करता है (जिस तरीके से आप चाहते हैं विरूपण को कम करता है) और [बेस ggplot2] का उपयोग करना (https://github.com/hadley/ggplot2/विकी/साजिश-बहुभुज-आकारफाइल) मानचित्र बनाने के लिए कार्य करता है। –

उत्तर

4

मुझे लगता है कि coord_cartesian() का उपयोग करके आप जो चाहते हैं उसे दे सकते हैं। 5 पंक्तियाँ का उपयोग करते हुए अपनी पोस्ट में दिखाया

map <- get_map(location = "Amsterdam", zoom = 11) 
ggmap(map) + 
    geom_point(data = df_vertices, 
      aes(x = Longitude, y = Latitude, size = scaledkWh), 
      colour = "red", alpha =0.5) + 
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.5, "cm"), type = "closed"), 
      size = df$scaledAmount, alpha = 0.5, curvature = 0.15, inherit.aes = TRUE) 
scale_size_continuous(range=c(1,30)) + 
coord_cartesian() 

enter image description here

+0

धन्यवाद! @Mlavoie –

+0

बड़े नक्शे (कहें, यूरोप) के साथ विफल रहता है - गैर-रैखिकता बहुत बड़ी हो जाती है। – Valentas

+0

@ वैलेंटास, हो सकता है कि आप अपने प्रश्न को अपने डेटा के साथ पोस्ट कर सकें कि वास्तव में समस्या क्या है। – MLavoie

संबंधित मुद्दे