R Language
भौगोलिक मानचित्र का परिचय
खोज…
परिचय
भौगोलिक डेटा के लिए I / O भी देखें
पैकेज मैप्स से मैप के साथ बेसिक मैप-मेकिंग
पैकेज maps
से फ़ंक्शन map()
आर के साथ नक्शे बनाने के लिए एक सरल प्रारंभिक बिंदु प्रदान करता है।
एक बुनियादी विश्व मानचित्र निम्नानुसार तैयार किया जा सकता है:
require(maps)
map()
किसी रंग के वर्ण नाम या हेक्स मान या तो रंग पैरामीटर, col
को सेट करके रूपरेखा का रंग बदला जा सकता है:
require(maps)
map(col = "cornflowerblue")
col
में रंग के साथ भूमि द्रव्यमान भरने के लिए हम fill = TRUE
सकते हैं fill = TRUE
:
require(maps)
map(fill = TRUE, col = c("cornflowerblue"))
किसी भी लम्बाई के एक वेक्टर के लिए आपूर्ति की जा सकती col
जब fill = TRUE
भी सेट किया गया है:
require(maps)
map(fill = TRUE, col = c("cornflowerblue", "limegreen", "hotpink"))
उदाहरण में, col
से रंगों को क्षेत्रों के प्रतिनिधित्व वाले नक्शे में बहुभुज को मनमाने ढंग से सौंपा गया है और यदि पॉलीगॉन की तुलना में कम रंग हैं तो रंगों को पुनर्नवीनीकरण किया जाता है।
हम एक सांख्यिकीय चर का प्रतिनिधित्व करने के लिए रंग कोडिंग का भी उपयोग कर सकते हैं, जिसे वैकल्पिक रूप से एक किंवदंती में वर्णित किया जा सकता है। इस तरह बनाया गया एक मानचित्र "कोरोप्लेथ" के रूप में जाना जाता है।
निम्नलिखित choropleth उदाहरण सेट के पहले तर्क map()
, जो कि database
के लिए "county"
और "state"
रंग कोड बेरोजगारी के लिए अंतर्निहित डेटासेट से डेटा का उपयोग कर unemp
और county.fips
जबकि सफेद में राज्य लाइनों डालने:
require(maps)
if(require(mapproj)) { # mapproj is used for projection="polyconic"
# color US county map by 2009 unemployment rate
# match counties to map using FIPS county codes
# Based on J's solution to the "Choropleth Challenge"
# Code improvements by Hack-R (hack-r.github.io)
# load data
# unemp includes data for some counties not on the "lower 48 states" county
# map, such as those in Alaska, Hawaii, Puerto Rico, and some tiny Virginia
# cities
data(unemp)
data(county.fips)
# define color buckets
colors = c("paleturquoise", "skyblue", "cornflowerblue", "blueviolet", "hotpink", "darkgrey")
unemp$colorBuckets <- as.numeric(cut(unemp$unemp, c(0, 2, 4, 6, 8, 10, 100)))
leg.txt <- c("<2%", "2-4%", "4-6%", "6-8%", "8-10%", ">10%")
# align data with map definitions by (partial) matching state,county
# names, which include multiple polygons for some counties
cnty.fips <- county.fips$fips[match(map("county", plot=FALSE)$names,
county.fips$polyname)]
colorsmatched <- unemp$colorBuckets[match(cnty.fips, unemp$fips)]
# draw map
par(mar=c(1, 1, 2, 1) + 0.1)
map("county", col = colors[colorsmatched], fill = TRUE, resolution = 0,
lty = 0, projection = "polyconic")
map("state", col = "white", fill = FALSE, add = TRUE, lty = 1, lwd = 0.1,
projection="polyconic")
title("unemployment by county, 2009")
legend("topright", leg.txt, horiz = TRUE, fill = colors, cex=0.6)
}
Google विज़ के साथ 50 स्टेट मैप्स और एडवांस्ड चोरोप्लेथ्स
एक सामान्य सवाल है कि एक ही नक्शे पर भौतिक रूप से अलग-अलग भौगोलिक क्षेत्रों को कैसे संयोजित किया जाए (जैसे कि सभी 50 अमेरिकी राज्यों (अलास्का और हवाई के साथ मुख्य भूमि का रसपान किया गया) का वर्णन करने वाले कोरोप्लेथ के मामले में।
Google मानचित्र का लाभ उठाते समय एक आकर्षक 50 राज्य मानचित्र बनाना सरल है। Google के API में इंटरफेस में पैकेज googleVis
, ggmap
और RgoogleMaps
।
require(googleVis)
G4 <- gvisGeoChart(CityPopularity, locationvar='City', colorvar='Popularity',
options=list(region='US', height=350,
displayMode='markers',
colorAxis="{values:[200,400,600,800],
colors:[\'red', \'pink\', \'orange',\'green']}")
)
plot(G4)
समारोह gvisGeoChart()
अब तक कम जैसे बड़े मानचित्रण विधियों, की तुलना में एक choropleth बनाने के लिए कोडिंग की आवश्यकता map()
पैकेज से maps
। colorvar
पैरामीटर एक स्तर द्वारा निर्दिष्ट पर, एक सांख्यिकीय चर का आसान रंग की अनुमति देता है locationvar
पैरामीटर। के लिए पारित विभिन्न विकल्पों options
एक सूची के रूप में इस तरह के आकार (के रूप में नक्शे के विवरण के अनुकूलन के लिए अनुमति देते height
), आकृति ( markers
), और रंग कोडिंग ( colorAxis
और colors
)।
इंटरएक्टिव प्लॉटली मैप्स
plotly
पैकेज नक्शे सहित कई तरह के इंटरएक्टिव प्लॉट की अनुमति देता है। plotly
में नक्शा बनाने के कुछ तरीके हैं। या तो मैप डेटा की आपूर्ति स्वयं करें ( plot_ly()
या ggplotly()
माध्यम से), प्लॉटली की "मूल" मैपिंग क्षमताओं ( plot_geo()
या plot_mapbox()
), या यहां तक कि दोनों के संयोजन का उपयोग करें। स्वयं मानचित्र की आपूर्ति का एक उदाहरण होगा:
library(plotly)
map_data("county") %>%
group_by(group) %>%
plot_ly(x = ~long, y = ~lat) %>%
add_polygons() %>%
layout(
xaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE),
yaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE)
)
दोनों दृष्टिकोण, स्वैप का एक संयोजन के लिए plot_ly()
के लिए plot_geo()
या plot_mapbox()
ऊपर के उदाहरण में। अधिक उदाहरणों के लिए प्लॉटली बुक देखें।
अगला उदाहरण एक "कड़ाई से देशी" दृष्टिकोण है जो लेआउट.इगो विशेषता का लाभ उठाता है जो मानचित्र के सौंदर्यशास्त्र और ज़ूम स्तर को निर्धारित करता है। यह ब्राज़ील के शहरों को फ़िल्टर करने और "देशी" मैप के शीर्ष पर उन्हें प्लॉट करने के लिए maps
से डेटाबेस world.cities
का उपयोग करता है।
मुख्य चर: poph
शहर और इसकी आबादी के साथ एक पाठ है (जो माउस होवर पर दिखाया गया है); q
जनसंख्या की मात्रा से एक आदेशित कारक है। ge
में नक्शे के लेआउट के लिए जानकारी है। अधिक जानकारी के लिए पैकेज प्रलेखन देखें।
library(maps)
dfb <- world.cities[world.cities$country.etc=="Brazil",]
library(plotly)
dfb$poph <- paste(dfb$name, "Pop", round(dfb$pop/1e6,2), " millions")
dfb$q <- with(dfb, cut(pop, quantile(pop), include.lowest = T))
levels(dfb$q) <- paste(c("1st", "2nd", "3rd", "4th"), "Quantile")
dfb$q <- as.ordered(dfb$q)
ge <- list(
scope = 'south america',
showland = TRUE,
landcolor = toRGB("gray85"),
subunitwidth = 1,
countrywidth = 1,
subunitcolor = toRGB("white"),
countrycolor = toRGB("white")
)
plot_geo(dfb, lon = ~long, lat = ~lat, text = ~poph,
marker = ~list(size = sqrt(pop/10000) + 1, line = list(width = 0)),
color = ~q, locationmode = 'country names') %>%
layout(geo = ge, title = 'Populations<br>(Click legend to toggle)')
कैटलॉग के साथ गतिशील HTML मैप बनाना
USC वेब के लिए गतिशील मानचित्र बनाने के लिए एक ओपन-सोर्स जावास्क्रिप्ट लाइब्रेरी है। RStudio पत्रक के लिए R बाइंडिंग, इसके माध्यम से उपलब्ध लिखा leaflet
पैकेज , के साथ बनाया गया htmlwidgets
। कैटलॉग मानचित्र आरएमार्कडाउन और चमकदार पारिस्थितिकी प्रणालियों के साथ अच्छी तरह से एकीकृत होते हैं।
एक नक्शा और बाद के कार्यों को जोड़ने (या हटाने) नक्शा परतों को शुरू करने के लिए एक leaflet()
फ़ंक्शन का उपयोग करके इंटरफ़ेस को पाइप किया गया है । कोरोप्लेथ मैप बनाने के लिए पॉपअप के साथ मार्कर से लेकर पॉलीगॉन तक कई तरह की परतें उपलब्ध हैं। डेटा leaflet()
में वेरिएबल्स को leaflet()
पारित कर दिया जाता है जो फ़ंक्शन-शैली ~
उद्धरण के माध्यम से एक्सेस किया जाता है।
state.name
और state.center
डेटासेट को मैप करने के लिए:
library(leaflet)
data.frame(state.name, state.center) %>%
leaflet() %>%
addProviderTiles('Stamen.Watercolor') %>%
addMarkers(lng = ~x, lat = ~y,
popup = ~state.name,
clusterOptions = markerClusterOptions())
(स्क्रीनशॉट; डायनामिक संस्करण के लिए क्लिक करें।) शाइनी अनुप्रयोगों में डायनामिक कैटलॉग मानचित्र
पत्रक पैकेज बनाया गया है शाइनी के साथ integerate
Ui में आप फोन leafletOutput()
और सर्वर में आप कॉल renderLeaflet()
library(shiny)
library(leaflet)
ui <- fluidPage(
leafletOutput("my_leaf")
)
server <- function(input, output, session){
output$my_leaf <- renderLeaflet({
leaflet() %>%
addProviderTiles('Hydda.Full') %>%
setView(lat = -37.8, lng = 144.8, zoom = 10)
})
}
shinyApp(ui, server)
हालाँकि, प्रतिक्रियाशील इनपुट जो renderLeaflet
अभिव्यक्ति को प्रभावित करते हैं, जब प्रतिक्रियाशील तत्व को अपडेट किया जाता है तो हर बार पूरे नक्शे को फिर से तैयार किया जाएगा।
इसलिए, पहले से चल रहे नक्शे को संशोधित करने के लिए आपको leafletProxy()
फ़ंक्शन का उपयोग करना चाहिए।
आम तौर पर आप नक्शे के स्थिर पहलुओं को बनाने के लिए leaflet
का उपयोग करते हैं, और leafletProxy
को गतिशील तत्वों को प्रबंधित करने के लिए, उदाहरण के लिए:
library(shiny)
library(leaflet)
ui <- fluidPage(
sliderInput(inputId = "slider",
label = "values",
min = 0,
max = 100,
value = 0,
step = 1),
leafletOutput("my_leaf")
)
server <- function(input, output, session){
set.seed(123456)
df <- data.frame(latitude = sample(seq(-38.5, -37.5, by = 0.01), 100),
longitude = sample(seq(144.0, 145.0, by = 0.01), 100),
value = seq(1,100))
## create static element
output$my_leaf <- renderLeaflet({
leaflet() %>%
addProviderTiles('Hydda.Full') %>%
setView(lat = -37.8, lng = 144.8, zoom = 8)
})
## filter data
df_filtered <- reactive({
df[df$value >= input$slider, ]
})
## respond to the filtered data
observe({
leafletProxy(mapId = "my_leaf", data = df_filtered()) %>%
clearMarkers() %>% ## clear previous markers
addMarkers()
})
}
shinyApp(ui, server)