2015-11-04 28 views
8

में अल्फा (पारदर्शिता) सेट करें और inset_raster() में रंग भरें I ggplot2 में GoogleMaps बेस मैप को ओवरराइड करने वाले रास्टर के साथ एक नक्शा प्लॉट करना चाहते हैं। इसलिए, मैं get_map() और insert_raster() इस तरह इस्तेमाल किया:ggmap आधार मानचित्र में रास्टर जोड़ें: ggplot2

library(ggplot2) 
library(ggmap) 

bm <- ggmap(get_map(location = "Bangkok", maptype = "hybrid")) 

bm + inset_raster(as.raster(r), xmin = [email protected][1], xmax = [email protected][2], 
        ymin = [email protected][3], ymax = [email protected][4]) 

वहाँ एक alpha सेट और fill रंग बदलने के लिए किसी भी संभावना है?

परिणाम इस प्रकार है: enter image description here

उत्तर

8

भी तेजी से fortify बिना:

मुझे लगता है कि हमने पाया this blog entry से अधिक जानकारी के

के लिए नीचे दिए गए मूल पोस्ट पढ़ें ggplot::geom_polygon()

में सीधे स्थानिक बहुभुज का उपयोग कर सकते हैं

स्पीड की साजिश रचने अगर आप सिर्फ कुछ

जैसे नीचे बताया गया कल्पना करने के लिए की जरूरत से निपटने के लिए कैसे, इस तरह के अंकन पिक्सल की बड़ी संख्या के साथ बहुत धीमी गति से हो सकता है। इसलिए, आप इसे बहुभुज में परिवर्तित करने से पहले पिक्सल की संख्या को कम करने पर विचार कर सकते हैं (जो ज्यादातर मामलों में मानचित्र में जानकारी की मात्रा को कम नहीं करता है)। इसलिए, raster::aggregate का उपयोग पिक्सेल की उचित मात्रा में कम करने के लिए किया जा सकता है।

उदाहरण दिखाता है कि 4 के क्रम से पिक्सेल की संख्या में कमी आई है (यानी 2 * 2, क्षैतिज * लंबवत)। अधिक जानकारी के लिए ?raster::aggregate देखें।

r <- aggregate(r, fact = 2) 
# afterwards continue with rasterToPolygons(r)... 

मूल पोस्ट:

थोड़ी देर के बाद, मैं इस समस्या को हल करने के लिए एक रास्ता मिल गया। रास्टर को बहुभुज में परिवर्तित करना! इस विचार को मूल रूप से Marc Needham's blog post के बाद कार्यान्वित किया गया था।

फिर भी, एक दोष है: ggplot बड़ी संख्या में बहुभुजों के साथ वास्तव में धीमा हो जाता है, जिसे आप अनिवार्य रूप से सामना करेंगे। हालांकि, आप png() (या अन्य) डिवाइस में प्लॉट करके चीजों को गति दे सकते हैं।

library(raster) 
library(ggplot2) 
library(ggmap) 

r <- raster(....) # any raster you want to plot 
rtp <- rasterToPolygons(r) 
[email protected]$id <- 1:nrow([email protected]) # add id column for join 

rtpFort <- fortify(rtp, data = [email protected]) 
rtpFortMer <- merge(rtpFort, [email protected], by.x = 'id', by.y = 'id') # join data 

bm <- ggmap(get_map(location = "Shanghai", maptype = "hybrid", zoom = 10)) 

bm + geom_polygon(data = rtpFortMer, 
        aes(x = long, y = lat, group = group, fill = layer), 
        alpha = 0.5, 
        size = 0) + ## size = 0 to remove the polygon outlines 
    scale_fill_gradientn(colours = topo.colors(255)) 

यह कुछ इस तरह का परिणाम:

Raster with an alpha on a ggmap base map

1

सिर्फ अपने आप को इस ध्यान दे रहा।

library(ggplot2) 
library(ggmap) 

bm <- ggmap(get_map(location = "Bangkok", maptype = "hybrid")) 

bm <- bm + geom_raster(...) # insert your raster here 

bm <- bm + coord_cartesian() 

plot(bm) 

मैं हूं:

Error: geom_raster only works with Cartesian coordinates.

इस मुद्दे पर चारों ओर काम coord_cartesian उपयोग करने के लिए() इस प्रकार है: मुद्दा मैं का सामना करना पड़ा एक रेखापुंज के साथ एक ggmap उत्पादन ओवरले करने के लिए कोशिश कर रहा था निम्न त्रुटि थी सुनिश्चित नहीं है कि आपका रास्टर आर कहाँ से आ रहा है। इसके लिए काम करने के लिए बस अपने रास्टर आर को डेटा फ्रेम में परिवर्तित करें और geom_raster() निर्देशों के अनुसार डेटा जोड़ें, यह सुनिश्चित करें कि निर्देशांक lat/long (यानी मानचित्र के समान) में हैं।

geom_raster() के माध्यम से, अपने प्रश्न का उत्तर देने के लिए आप अल्फा में हेरफेर कर सकते हैं और भर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

btw इस काम के आसपास मूल रूप से इस लिंक पर उठाया गया था: https://groups.google.com/forum/embed/#!topic/ggplot2/nqzBX22MeAQ

+0

इस उत्तर के लिए धन्यवाद


यहाँ एक कोड उदाहरण है। हालांकि, अगर कार्टेसियन निर्देशांक का उपयोग किया जाता है, तो पहलू अनुपात बनाए रखा नहीं जाता है। इस प्रकार, यह भौगोलिक अनुप्रयोगों के लिए बहुत उपयुक्त नहीं है – loki

+0

निम्नलिखित जोड़ने का प्रयास करें: bm <- bm + coord_fixed (xlim = c (a, b), ylim = c (c, d), अनुपात = 1.3), जहां ए, बी , सी, डी आपके द्वारा चुने गए दृश्य पैनल के विस्तार हैं। यहां कुंजी राशन को 1.3 पर सेट कर रही है। – pdbentley

+0

वैकल्पिक रूप से आप बस बीएम <- बीएम + coord_fixed (1.3) जोड़ें। – pdbentley

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