R'de Choropleth: özel molalar ve çizim


13

Bir choropleth haritası çizmeyle ilgili bir sorum var. Bir haritayı özel aralarla çizme konusunda ne tavsiye edilir? Ve biraz çekici görünmesini sağlayın.

Benim içinde komut dosyası bazı verileri görselleştirmek için arsa ve spplot komutunu kullandık ama sonuç tamamen mutlu değilim. neden olduğunu anlamak kolay. Spplot kullanarak farklı değerler için renkleri tekrarlayan bir renk rampası alıyorum, bu biraz garip. Özel aralarla çizim kullanarak değerler için daha iyi aralıklar oluşturamadım, örneğin sıfır değerleri harita üzerinde beyaz olacak şekilde. Efsane ve harita arasındaki çarpık oranlar muhtemelen Rstudio'nun sonucudur.

Birisinin özel aralar kullanarak R'de choropleth haritalarını çizmek için daha iyi önerileri olup olmadığını merak ettim mi?

DÜZENLEME 20-02-2013

Önerildiği gibi bir choropleth haritası oluşturmak için ggplot2 kullandım. Aşağıdaki kodu kullandım. İki sorunla karşılaştım. Birincisi, veriler güçlendirildikten sonra şekil dosyasındaki tüm verilerin veri çerçevesine aktarılmamasıdır. Böylece veri birleştirmek böylece "id" değişkeni yeniden adlandırmak zorunda. Küçük sorun.

Daha büyük bir sorun, veri çerçevesindeki verilerin doğru olmasına rağmen, ggplot, verilerin yanlış olduğu bir harita gösterir. Göstergeye göre renk değeri, verilerdeki değişkenin değerine karşılık gelmiyor. Burada bir şey mi görüyorum?

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

Çoğaltma verilerine bağlantı

Güncelleme 13-11-2015: Şekil dosyasına bağlantı düzeltildi . Choropleth'in nasıl çizileceği ile ilgili çözüm için aşağıdaki cevaba bakınız.


5
Ben de ggplot2varsayılan olarak daha iyi görünümlü çıktı çıkıyor düşünüyorum choropleth haritalar için bakmak istiyorsunuz .
SlowLearner

Evet, ggplot2'yi kullanmaktan emin değildim çünkü şekil dosyamdaki uzun / lat verileri ulusal sınırların ana hatlarını değil, yalnızca bir noktayı belirtiyor. Bu yüzden bu grafikleri bir choropleth haritası oluşturmak için kullandım. Ben GIS veri R ile çok aşina değilim, bu yüzden bunun için gerçekten basit bir çözüm göz ardı eğer emin değilim.
horseoftheyear17

Lütfen şekil dosyasına giden bağlantıyı düzeltin.
pufferfish

Elbette, hiç sorun değil.
horseoftheyear

Yanıtlar:


6

Yukarıdaki kod ile bir sorun görmüyorum dışında 6 açık seviyeleri var onset, bu yüzden onları sürekli bir değişken olarak değil, faktörler olarak tedavi ediyorum. factorAşağıdaki koddaki çağrıyı not edin .

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

Bu kod aşağıdaki sonucu verir:

orijinal

Özel renkler istiyorsanız bunu deneyebilirsiniz:

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

Hangi bunu üretir:

özel renkler


Yine de yanlış değerleri çiziyor. Çok tuhaf.
horseoftheyear20

Tamam, sorunun tam olarak ne olduğunu örneklerle belirtebilir misiniz? Angola sütun 3için bir a atanır ve grafikte onseta 3çizilir. İşe yarıyor gibi görünüyor. Muhtemelen bir şey eksik mi?
SlowLearner

Evet, üzgünüm. Angola doğru olan birkaç kişiden biridir. Örneğin Güney Afrika, Namibya veya Senegal'e bakarsanız, renkle gösterilen değerin verilerdeki değere karşılık gelmediğini göreceksiniz. Yani Senegal 6 (şimdi 2), Güney Afrika 0 (4) ve Namibya da 0 (1) olmalıdır. Burundi ve Ruanda da birkaç isim vermek için kapalı. Gelen linke bir komplo ben doğru değerlerle bir harita gösterir spplot ile yaptı. Bu çizim doğrudan şekil dosyasından yapılır. Yani sanırım veri çerçevesi oluştururken bir şeyler ters gidiyor.
horseoftheyear

5

ClassInt paketinin sayısal veriler için aralıkları hesaplamak için bir dizi işlevi vardır - yükleyin ve belgeleri okuyun.


Evet, classInt paketini sabit aralıklarla (komut dosyasında gösterilmiyor) kullandım, ancak bununla ilgili sorun sürekli sayısal veriler için aralıkları hesaplamasıdır. Aralıklarım ayrıkken, olayların sıklığını temsil ediyorlar. Bunu nasıl geliştirebileceğimi henüz öğrenemedik.
horseoftheyear17

1

Arşivler için kullandığım çözüm:

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

resim açıklamasını buraya girin


R için kullanışlı haritalama işlevselliği sunan bir paket var. Kartografi denir (ve özellikle belgelere göre haritaların seçilmesine izin verir ). Konu dışıysa özür dilerim (cevabınızı zaten bulduğunuz gibi) ama diyelim ki ileride başvurmak üzere ..!
mgc

Çok hoş görünüyor. Kesinlikle başka işler için bir deneyeceğim, bu yüzden referans için teşekkürler.
horseoftheyear
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.