R의 Choropleth : 사용자 정의 나누기 및 플로팅


13

choropleth 맵을 구성하는 것과 관련하여 질문이 있습니다. 사용자 정의 나누기로 맵을 플롯 할 때 권장되는 사항은 무엇입니까? 그리고 조금 매력적으로 보이게하십시오.

스크립트 에서 plot 및 spplot 명령을 사용하여 일부 데이터를 시각화했지만 결과에 완전히 만족하지는 않습니다. 이유를 쉽게 알 수 있습니다. spplot을 사용 하면 약간 이상한 다른 값에 대해 색상을 반복하는 색상 램프가 나타납니다. 사용자 정의 나누기와 함께 플롯을 사용 하면 값의 간격을 더 잘 만들 수 없으므로 예를 들어 0 값이 맵에서 흰색으로 표시됩니다. 범례와지도 사이의 비뚤어진 비율은 아마도 Rstudio의 결과라고 생각합니다.

그래서 누군가 사용자 정의 나누기를 사용하여 R에서 choropleth 맵을 플롯하는 더 나은 제안이 있는지 궁금합니다.

20-02-2013 편집

제안한대로 나는 choropleth 맵을 만들기 위해 ggplot2를 사용했습니다. 아래 코드를 사용했습니다. 두 가지 문제가 발생했습니다. 하나는 데이터를 강화한 후 shapefile의 모든 데이터가 데이터 프레임으로 전송되는 것은 아닙니다. 따라서 데이터를 병합 할 수 있도록 "id"변수의 이름을 바꿔야합니다. 사소한 문제.

더 큰 문제는 데이터 프레임의 데이터가 정확함에도 불구하고 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()

복제 데이터에 연결

2015 년 11 월 13 일 업데이트 : 모양 파일에 대한 고정 링크 . choropleth를 플로팅하는 방법에 대한 솔루션은 아래 답변을 참조하십시오.


5
또한 ggplot2choropleth maps 를 사용 하는 것도 살펴볼 것 입니다. 기본적으로 더 나은 결과를 얻는다고 생각합니다.
SlowLearner

예, shapefile의 long / lat 데이터는 국경의 윤곽선이 아닌 점만 지정하므로 ggplot2 사용에 대해 확신하지 못했습니다. 따라서 나는이지도를 사용하여 choropleth 맵을 작성했습니다. R에서 GIS 데이터를 처리하는 데 익숙하지 않으므로 실제로 간단한 솔루션을 간과하고 있는지 확실하지 않습니다.
horseoftheyear

shapefile에 대한 링크를 수정하십시오.
복어

물론 문제 없습니다.
horseoftheyear

답변:


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

어느 것이 이것을 생성합니까?

맞춤 색상


그래도 여전히 잘못된 값을 표시합니다. 매우 독특합니다.
horseoftheyear

예, 예를 들어 문제가 무엇인지 정확하게 지정할 수 있습니까? 앙골라는 열에 3대해 할당 되고 차트에 onseta 3를 표시합니다. 작동하는 것 같습니다. 아마도 뭔가 빠졌습니까?
SlowLearner 2013

죄송합니다. 죄송합니다. 앙골라는 올바른 몇 안되는 사람 중 하나입니다. 예를 들어 남아프리카, 나미비아 또는 세네갈을 보면 색상으로 표시된 값이 데이터의 값과 일치하지 않음을 알 수 있습니다. 따라서 세네갈은 6 (현재 2), 남아프리카 0 (4) 및 나미비아도 0 (1)이어야합니다. 부룬디와 르완다는 또 다른 이름을지었습니다. 에서 링크 플롯 나는 올바른 값으로지도를 보여줍니다 spplot로했다. 이 플롯은 shapefile에서 직접 수행됩니다. 따라서 데이터 프레임을 만드는 데 문제가 있다고 생각합니다.
horseoftheyear

5

classInt 패키지에는 숫자 데이터의 간격을 계산하기위한 여러 기능이 있습니다.이를 설치하고 문서를 읽으십시오.


예, 스크립트에 표시되지 않은 고정 중단과 함께 classInt 패키지를 사용했지만 문제는 연속 숫자 데이터의 간격을 계산한다는 것입니다. 내 간격이 불 연속적 인 반면, 간격은 이벤트 빈도를 나타냅니다. 아직 개선 방법을 찾지 못했습니다.
horseoftheyear

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

여기에 이미지 설명을 입력하십시오


유용한 매핑 기능을 제공하는 R 용 패키지가 있습니다. 이것을 지도 제작 이라고합니다 (특히 문서에 따라 지도 를 선택하는 것이 가능합니다). 주제를 벗어난 경우 (이미 답변을 찾은대로) 죄송하지만 나중에 참조 할 수 있도록하겠습니다 ..!
mgc

꽤 좋아 보인다. 나는 분명히 다른 작업을 시도해 볼 것이므로 참조 해 주셔서 감사합니다.
horseoftheyear
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.