आर में चोरोप्लेथ: कस्टम ब्रेक और प्लॉटिंग


13

मेरे पास एक प्रश्न है जो एक चेरोप्लेथ मानचित्र की साजिश के संबंध में है। कस्टम विराम के साथ मानचित्र तैयार करने के संबंध में क्या सिफारिश की गई है? और इसे थोड़ा आकर्षक बनाते हैं।

अपनी स्क्रिप्ट में मैंने कुछ डेटा की कल्पना करने के लिए प्लॉट और spplot कमांड का उपयोग किया है लेकिन मैं परिणाम से पूरी तरह से खुश नहीं हूं। यह देखना आसान है क्यों। Spplot का उपयोग करके मुझे एक रंग रैंप मिलता है जो विभिन्न मूल्यों के लिए रंगों को दोहराता है जो थोड़ा अजीब है। कस्टम ब्रेक के साथ प्लॉट का उपयोग करके मैं मूल्यों के लिए बेहतर अंतराल नहीं बना पाया हूं, उदाहरण के लिए मानचित्र पर शून्य-मान सफेद हैं। किंवदंती और मानचित्र के बीच तिरछा अनुपात मुझे लगता है कि शायद Rstudio का परिणाम है।

इसलिए मैंने सोचा कि क्या किसी के पास कस्टम ब्रेक का उपयोग करके आर में कोरोप्लेथ मैप्स की साजिश करने के लिए बेहतर सुझाव हैं?

EDIT 20-02-2013

जैसा कि मैंने सुझाव दिया था कि मैंने कोरग्लोप्थ मानचित्र बनाने के लिए ggplot2 का उपयोग किया है। मैंने नीचे कोड का उपयोग किया है। मुझे दो समस्याओं का सामना करना पड़ा। एक यह है कि डेटा को मज़बूत करने के बाद, आकृति के सभी डेटा को डेटा फ़्रेम में स्थानांतरित नहीं किया जाता है। इसलिए मुझे "आईडी" चर का नाम बदलना होगा ताकि मैं डेटा को मर्ज कर सकूं। छोटी सी बात।

एक बड़ा मुद्दा यह है कि डेटाफ़्रेम में डेटा सही होने के बावजूद, ggplot एक नक्शा दिखाता है जहाँ डेटा गलत है। किंवदंती के अनुसार रंग मान डेटा में चर के मूल्य के साथ मेल नहीं खाता है। क्या मैं यहाँ कुछ देख रहा हूँ?

# Plotting polygon shapefiles (try-out)
# Load the packages
require(rgdal)
require(maptools)
require(ggplot2)
gpclibPermit() # required for the fortify method
# Load the shapefile
africa=readOGR("/home/GIS",layer="africaII")
names(africa) 
# Load the data on conflict
conflict<-read.csv("africa_conflict.csv", header=TRUE)
names(conflict)
# Merge the data together
africadat<-merge(africa, conflict, by="ISO3")
# Changing the data in the shapefile
africa@data <- africadat
# Fortify so that ggplot can plot
africa.points = fortify(africa,region="ISO3")
# Change "id" to "ISO3"such that the datasets can be merged again
names(africa.points)[names(africa.points)=="id"]<-"ISO3"
africa.df=merge(africa.points,africadat,by="ISO3")
# Plot the data
ggplot(africa.df) + 
aes(long,lat,group=group) + 
geom_polygon(aes(fill =onset))+
geom_path(color="white") +
coord_equal()

प्रतिकृति डेटा के लिए लिंक

अपडेट 13-11-2015: आकार फ़ाइल के लिए निश्चित लिंक । कोरोप्लेथ की साजिश कैसे करें, इसके समाधान के लिए नीचे दिए गए उत्तर को देखें।


5
मैं ggplot2कोरोप्लेथ मानचित्रों का उपयोग करने पर भी विचार करूंगा , जो मुझे लगता है कि डिफ़ॉल्ट रूप से बेहतर दिखने वाला आउटपुट है।
धीरे

हाँ, मैं ggplot2 का उपयोग करने के बारे में निश्चित नहीं था क्योंकि मेरे आकार में लंबे / लम्बे डेटा केवल एक बिंदु को निर्दिष्ट करते हैं और राष्ट्रीय सीमाओं की रूपरेखा को नहीं। इसलिए इसलिए मैंने इन प्लॉटों का इस्तेमाल एक कोरोप्लेथ मैप बनाने के लिए किया। मैं आर में जीआईएस डेटा को संभालने के लिए बहुत परिचित नहीं हूं, तो यकीन नहीं होता कि मैं उसके लिए कुछ वास्तव में सीधा समाधान देख रहा हूं।
अश्वारोही

कृपया आकृति के लिंक को ठीक करें।
पफेरफिश

बिलकुल कोई परेशानी नही।
17

जवाबों:


6

मुझे उपरोक्त कोड के साथ कोई समस्या नहीं दिखाई दे रही है, सिवाय इसके कि आपके पास 6 स्पष्ट स्तर हैं onset, इसलिए मैं उन्हें एक निरंतर चर के बजाय कारकों के रूप में मानूंगा। factorनीचे दिए गए कोड में कॉल को नोट करें।

ggplot(africa.df) +
  aes(long,lat,group=group) +
  geom_polygon(aes(fill = factor(onset)))+
  geom_path(color="white") +
  coord_equal()

यह कोड निम्नलिखित परिणाम देता है:

मूल

यदि आप कस्टम रंग चाहते हैं, तो आप यह कोशिश कर सकते हैं:

library(RColorBrewer)
my.cols <- brewer.pal(6, "Blues")

ggplot(africa.df) +
  aes(long,lat,group=group) +
  geom_polygon(aes(fill = factor(onset)))+
  scale_fill_manual("Onset\n", values = my.cols, guide = "legend") +
  geom_path(color="white") +
  coord_equal()

जो इस का उत्पादन करता है:

कस्टम रंग


हालांकि यह अभी भी गलत मूल्यों की साजिश रचता है। बहुत अजीब।
अश्वारोही वर्ष

ठीक है, क्या आप यह बता सकते हैं कि उदाहरण के साथ समस्या क्या है? अंगोला को कॉलम के 3लिए असाइन किया गया onsetहै और 3चार्ट में प्लॉट दिए गए हैं। वह काम करने लगता है। शायद मैं कुछ याद कर रहा हूँ?
SlowLearner

अरे हाँ सॉरी। अंगोला उन कुछ में से एक है जो सही है। यदि आप उदाहरण के लिए दक्षिण अफ्रीका, नामीबिया, या सेनेगल को देखते हैं, तो आप देखेंगे कि रंग द्वारा इंगित मूल्य डेटा में मूल्य के अनुरूप नहीं है। तो सेनेगल एक 6 (अब एक 2), दक्षिण अफ्रीका 0 (4) और नामीबिया भी 0 (1) होना चाहिए। बुरुंडी और रवांडा भी कुछ अन्य के नाम पर हैं। में लिंक एक साजिश मैं spplot जो सही मान वाला एक मानचित्र दिखाता के साथ बनाया। यह प्लॉट सीधे आकृति से किया जाता है। इसलिए मुझे लगता है कि डेटाफ़्रेम बनाने में कुछ गड़बड़ है।
अश्वारोही

5

ClassInt पैकेज में संख्यात्मक डेटा के लिए अंतराल की गणना के लिए कई कार्य हैं - इसे स्थापित करें और डॉक्स पढ़ें।


हां, मैंने निश्चित विराम के साथ classInt पैकेज का उपयोग किया (स्क्रिप्ट में नहीं दिखाया गया है) लेकिन इसके साथ समस्या यह है कि यह निरंतर संख्यात्मक डेटा के लिए अंतराल की गणना करता है। जबकि मेरे अंतराल असतत हैं, वे घटनाओं की आवृत्ति का प्रतिनिधित्व करते हैं। अभी तक पता नहीं चला है कि उस पर कैसे सुधार किया जाए।
अश्वारोही

1

अभिलेखागार के लिए, मेरे द्वारा उपयोग किया जाने वाला समाधान:

#### Choropleth in R example ####

## Libraries
library(classInt)    
library(lattice)
library(RColorBrewer)    
library(sp)

## Shapefile for Sub-Sahara Africa (see link in Q)
africa<-readShapeSpatial("shp/africa.shp") 

## Add data to shapefile
# In this case the number of conflict onsets between 1981-2010
africa$onset<-c(3,0,3,1,3,1,4,2,3,0,
                2,0,3,1,1,0,2,1,1,1,
                2,0,3,0,1,0,0,4,2,1,
                3,0,1,0,6,1,3,1,1,0,
                0,1,1,0,0,0,0)

## Plot 
par(mar=c(1,4,1,1),family="serif")
trellis.par.set(axis.line=list(col=NA)) # Remove borders
spplot(africa,zcol="onset",col.regions=colorRampPalette(c("white","grey10"))(20),
main=list(label="Number of civil conflict onsets 1981-2010",cex=3),
pretty=T,par.settings=list(axis.text=list(cex=3)))

यहाँ छवि विवरण दर्ज करें


आर के लिए एक पैकेज है जो उपयोगी मैपिंग कार्यक्षमता प्रदान करता है। इसे कार्टोग्राफी कहा जाता है (और विशेष रूप से प्रलेखन के अनुसार कोरोप्लेथ मानचित्र की अनुमति देता है )। क्षमा करें यदि यह विषय बंद है (जैसा कि आप पहले से ही अपना उत्तर पा चुके हैं), लेकिन मान लीजिए कि यह भविष्य के संदर्भ के लिए है ..!
mgc

यह बहुत अच्छा लग रहा है। मैं निश्चित रूप से इसे अन्य काम के लिए कोशिश करूँगा, इसलिए संदर्भ के लिए धन्यवाद।
अश्वशक्ति
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.