Choropleth di R: custom break dan plotting


13

Saya punya pertanyaan sehubungan dengan merencanakan peta choropleth. Apa yang disarankan sehubungan dengan memplot peta dengan jeda khusus? Dan membuatnya terlihat sedikit menarik.

Dalam skrip saya, saya telah menggunakan perintah plot dan spplot untuk memvisualisasikan beberapa data tetapi saya tidak sepenuhnya senang dengan hasilnya. Mudah saja untuk tahu sebabnya. Menggunakan spplot saya mendapatkan jalur warna yang mengulangi warna untuk nilai yang berbeda yang agak aneh. Menggunakan plot dengan jeda kustom saya belum dapat membuat interval yang lebih baik untuk nilai, sehingga misalnya nilai nol berwarna putih pada peta. Proporsi miring antara legenda dan peta saya pikir mungkin hasil dari Rstudio.

Jadi saya bertanya-tanya apakah seseorang memiliki saran yang lebih baik untuk memplot peta choropleth di R menggunakan custom break?

EDIT 20-02-2013

Seperti yang disarankan saya telah menggunakan ggplot2 untuk membuat peta choropleth. Saya telah menggunakan kode di bawah ini. Saya mengalami dua masalah. Salah satunya adalah bahwa setelah memperkuat data tidak semua data dari shapefile ditransfer ke bingkai data. Jadi saya harus mengubah nama variabel "id" sehingga saya bisa menggabungkan data. Masalah kecil.

Masalah yang lebih besar adalah bahwa meskipun fakta bahwa data dalam kerangka data sudah benar, ggplot menunjukkan peta di mana data tersebut salah. Nilai warna menurut legenda tidak sesuai dengan nilai variabel dalam data. Apakah saya mengabaikan sesuatu di sini?

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

Tautan ke data replikasi

Pembaruan 13-11-2015: Memperbaiki tautan ke file bentuk . Lihat jawaban di bawah untuk solusi tentang cara merencanakan choropleth.


5
Saya juga akan melihat menggunakan ggplot2untuk peta choropleth, yang saya pikir ternyata terlihat lebih baik secara default.
SlowLearner

Ya saya tidak yakin tentang menggunakan ggplot2 karena data lama / lat di shapefile saya hanya menentukan titik dan bukan garis besar batas nasional. Jadi karena itu saya menggunakan plot ini untuk membuat peta choropleth. Saya tidak terlalu terbiasa dengan penanganan data SIG di R jadi tidak yakin jika saya mengabaikan beberapa solusi yang sangat mudah untuk itu.
horseoftheyear

Harap perbaiki tautan ke shapefile.
ikan buntal

Tentu saja, tak masalah.
horseoftheyear

Jawaban:


6

Saya tidak melihat masalah dengan kode di atas kecuali bahwa Anda memiliki 6 level yang jelas onset, jadi saya akan memperlakukan mereka sebagai faktor daripada sebagai variabel kontinu. Perhatikan factorpanggilan dalam kode di bawah ini.

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

Kode itu memberikan hasil sebagai berikut:

asli

Jika Anda ingin warna khusus, Anda dapat mencoba ini:

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

Yang menghasilkan ini:

warna khusus


Ini masih memplot nilai yang salah. Sangat aneh.
horseoftheyear

OK, bisakah Anda menentukan dengan tepat apa masalahnya, dengan contoh? Angola ditugaskan 3untuk onsetkolom dan plot 3di bagan. Itu sepertinya berhasil. Mungkin saya kehilangan sesuatu?
SlowLearner

Ow ya maaf. Angola adalah satu dari sedikit yang benar. Jika Anda melihat Afrika Selatan, Namibia, atau Senegal misalnya, Anda akan melihat bahwa nilai yang ditunjukkan oleh warna tidak sesuai dengan nilai dalam data. Jadi Senegal harus menjadi 6 (sekarang 2), Afrika Selatan 0 (4) dan Namibia juga 0 (1). Burundi dan Rwanda juga akan menyebutkan beberapa lainnya. Di tautan, saya membuat plot dengan spplot yang memperlihatkan peta dengan nilai yang benar. Plot ini dilakukan langsung dari shapefile. Jadi saya kira ada yang tidak beres dengan membuat dataframe.
horseoftheyear

5

Paket classInt memiliki sejumlah fungsi untuk interval komputasi untuk data numerik - instal dan baca dokumen.


Ya, saya menggunakan paket classInt dengan jeda tetap (tidak ditampilkan dalam skrip) tetapi masalah dengan itu adalah bahwa ia menghitung interval untuk data numerik kontinu. Sedangkan interval saya berbeda, mereka mewakili frekuensi peristiwa. Belum tahu bagaimana cara memperbaikinya.
horseoftheyear

1

Untuk arsip, solusi yang saya gunakan:

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

masukkan deskripsi gambar di sini


Ada paket untuk R yang menawarkan fungsionalitas pemetaan yang berguna. Ini disebut kartografi (dan terutama memungkinkan untuk choropleth peta sesuai dengan dokumentasi). Maaf jika ini di luar topik (karena Anda sudah menemukan jawaban Anda) tetapi katakanlah itu untuk referensi di masa mendatang ..!
mgc

Itu terlihat sangat bagus. Saya pasti akan mencobanya untuk pekerjaan lain, jadi terima kasih untuk referensi.
horseoftheyear
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.