2016-06-05 11 views
5

मैं ggplot2 का उपयोग कर लाल आयताकार के साथ हाइलाइट किए गए ब्याज के क्षेत्र के साथ नॉर्वे का नक्शा प्लॉट कर रहा हूं। अगर मैं geom_rect या coord_map को छोड़ देता हूं, तो मानचित्र बहुत तेज़ी से प्लॉट करता है (< 1 सेकंड)। अगर मैं दोनों का उपयोग करता हूं - जो मुझे चाहिए - प्रिंट करना और प्रस्तुत करना बेहद धीमा है (लगभग पांच मिनट)।geom_rect + coord_map = बहुत धीमी

मुझे लगता है कि यह झुकाव के साथ कुछ करने के लिए है - आयत को नए समन्वय प्रणाली पर प्रक्षेपित करना। क्या इसे नियंत्रित करने का कोई तरीका है?

library(ggplot2) 
library(maps) 
library(mapdata) 


xlim <- c(5, 10) 
ylim <- c(60, 62) 

norwaymap <- map_data("worldHires", "Norway") 
a <- ggplot(norwaymap, aes(x = long, y = lat, group = group)) + 
    geom_polygon(colour = NA, fill = "grey60") + 
    geom_rect(xmin = xlim[1], xmax = xlim[2], ymin = ylim[1], ymax = ylim[2], 
    colour = "red", fill = NA) + 
    coord_map(xlim = c(3, 33), ylim = c(57, 72)) 
print(a) # super slow 

कम रिज़ॉल्यूशन मानचित्र का उपयोग करके नक्शा बहुत तेजी से प्लॉटिंग (लगभग 10 सेकंड) बनाता है।

उत्तर

5

मर्केटर अनुमान का सहारा लेना कोई ज़रूरत नहीं:

ggplot() + 
    geom_map(data=norwaymap, map=norwaymap, 
      aes(long, lat, map_id=region), 
      color=NA, fill="grey60") + 
    geom_rect(data=data.frame(), 
      aes(xmin=xlim[1], xmax=xlim[2], ymin=ylim[1], ymax=ylim[2]), 
      color="red", fill=NA) + 
    ggalt::coord_proj("+proj=aea +lat_1=60 +lat_2=70 +lon_0=18.37", 
        xlim=c(3, 33), ylim=c(57, 72)) + 
    ggthemes::theme_map() 
:

library(ggplot2) 
library(maps) 
library(mapdata) 

norwaymap <- map_data("worldHires", "Norway") 

xlim <- c(5, 10) 
ylim <- c(60, 62) 

ggplot() + 
    geom_map(data=norwaymap, map=norwaymap, 
      aes(long, lat, map_id=region), 
      color=NA, fill="grey60") + 
    geom_rect(data=data.frame(), 
      aes(xmin=xlim[1], xmax=xlim[2], ymin=ylim[1], ymax=ylim[2]), 
      color="red", fill=NA) + 
    coord_map(xlim=c(3, 33), ylim=c(57, 72)) + 
    ggthemes::theme_map() 

enter image description here

एक अन्य विकल्प एक एल्बर्स समान क्षेत्र शांकव प्रक्षेपण (उस क्षेत्र के लिए एक ठेठ एक) का उपयोग किया जाएगा

enter image description here

अनुमानित आयत का एक "नुकसान" (यह मर्केटर के साथ भी है, केवल कोई विरूपण नहीं है)।

किसी भी तरह से, आयताकार के लिए जादू यह सुनिश्चित कर रहा है कि आप केवल एक ही प्लॉट कर रहे हैं, जैसे ल्यूक ने कहा।

+1

तो geom_rect नक्शा डेटा में प्रत्येक पंक्ति के लिए एक आयताकार चित्रित कर रहा था, लेकिन 'data = data.frame()' को सेट करना बंद कर देता है। खुशी है मैंने पूछा - यह मेरे द्वारा जल्दी से काम नहीं किया होगा। –

4

उपयोग coord_quickmap और विशेष रूप से geom_rect के बजाय annotate चीजें तेजी लाने के लिए:

ggplot(norwaymap, aes(x = long, y = lat, group = group)) + 
    geom_polygon(colour = NA, fill = "grey60") + 
    annotate(geom="rect", xmin = xlim[1], xmax = xlim[2], ymin = ylim[1], 
      ymax = ylim[2], colour = "red", fill = NA) + 
    coord_quickmap(xlim = c(3, 33), ylim = c(57, 72)) 

geom_rect overplots उसी जगह पर कई आयतों, annotate सिर्फ एक आयत भूखंडों। आप मदद फ़ाइलों में coord_map और coord_quickmap के बीच के अंतर के बारे में पढ़ सकते हैं: ?coord_quickmap

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