2013-08-02 3 views
4

현재 영국의 셰이프 파일이 있으며 영국의 여러 지역에있는 종의 수를 플로팅했습니다. 지금까지 나는 단지 3 종의 개체군을 계획하고 빨강 = 높고 오렌지 = 중간, 녹색 = 낮음으로 색칠했습니다. 하지만 내가하고 싶은 것은 그라디언트 플롯을 단지 3 가지 색상으로 묶는 대신에 사용하는 것입니다. 지금까지 Count라는 테이블이 있습니다.이 테이블에는 열 이름으로 영역이 있고 아래에 각 영역의 수를 나타냅니다. 내 가장 낮은 카운트가 0이고 내 최고 레벨이 2500이고 카운트의 영역이 내 셰이프 파일의 영역과 일치합니다. 불행하게도R : shapefile의 그라데이션 플롯

plot(ukmap[(ukmap$Region %in% High),],col='red',add=T) 

정말 할 수 없습니다 : 나는 레벨 입력 한 자신에게 다음

High<-colnames(Count)[which(Count>'input value here')] 

와이이 같은 Shape 파일에 플롯을 기반으로, 의대, 높은 낮은 것을 결정하는 기능을 가지고 어떤 패키지를 설치해도 colorRamp를 사용할 생각 이었지만 어떻게해야할지 모르겠습니다.

편집 : 내 데이터는이

 Wales Midlands North Scotland South East South West 
1  551  32  124  1   49   28 
3   23  99  291  152  164  107 
4   1  7  17  11   21   14 
7  192  32  12  0   1   9 
9   98  97  5  1   21   0 

및 첫 번째 열 같은 단지 종을 나타내는 숫자입니다 보이는 현재 I 영국의 shape 파일에 카운트을 나타내는 만의 경계를 기반으로 기능이 높음, 낮음, 낮음. 위 데이터는 내 셰이프 파일에 첨부되지 않습니다. 그런 다음 내 데이터 집합의 각 선 (종)을 반복하고 각 선 (종)마다 새지도를 그립니다.

답변

3

확인, 여기에 (내가 참조 할 수 ggplot 솔루션을 떠나) ggplot를 사용하지 않는 대체 솔루션입니다. 이 코드는 간단하지만 자신의 데이터에 어떻게 적용 할 수 있는지에 대한 아이디어 만 있으면 충분합니다.

# UK shapefile found via http://www.gadm.org/download 
uk.url <- "http://www.filefactory.com/file/s3dz3jt3vr/n/GBR_adm_zip" 

# replace following with your working directory - no trailing slash 
work.dir <- "C:/Temp/r.temp/gb_map" 

# the full file path for storing file 
file.loc <- paste0(work.dir, "/uk.zip") 

download.file (uk.url, destfile = file.loc, mode = "wb") 
unzip(file.loc, exdir = work.dir) 

# open the shapefile 
require(rgdal) 
uk <- readOGR(work.dir, layer = "GBR_adm2") 

# make some fake data to plot 
[email protected]$count <- round(runif(nrow([email protected]), 0, 2500), 0) 
[email protected]$count <- as.numeric([email protected]$count) 

# and plot it 
plot(uk, col = gray([email protected]$count/2500)) 

결과 코드는 다음과 같습니다. 범례를 포함하도록 요청을 다음

screenshot

편집, 내가 코드를 조금 쥐게했지만 모든 정직에서 나는 생산 품질의 무언가를 얻을 충분히 기본 R의 legend 기능을 이해하지 않고, 내가 더이 그것을 더 연구하고 싶다. (덧붙여서 모자 팁은 아이디어로는 this question입니다.) 코드 밑의 줄거리를 보면, 범례 색상 등을 재정렬해야한다는 것을 알았지 만,이를 연습용으로 원래 포스터에 남기거나 다른 질문으로 게시 할 것입니다.

# UK shapefile found via http://www.gadm.org/download 
uk.url <- "http://www.filefactory.com/file/s3dz3jt3vr/n/GBR_adm_zip" 

# replace following with your working directory - no trailing slash 
work.dir <- "C:/Temp/r.temp/gb_map" 

# the full file path for storing file 
file.loc <- paste0(work.dir, "/uk.zip") 

download.file (uk.url, destfile = file.loc, mode = "wb") 
unzip(file.loc, exdir = work.dir) 

# open the shapefile 
require(rgdal) 
uk <- readOGR(work.dir, layer = "GBR_adm2") 

# make some fake data to plot 
[email protected]$count <- as.numeric(round(runif(nrow([email protected]), 0, 2500), 0)) 
[email protected]$bin <- cut([email protected]$count, seq(0, 2500, by = 250), 
     include.lowest = TRUE, dig.lab = 4) 

# labels for the legend 
lev = levels([email protected]$bin) 
lev2 <- gsub("\\,", " to ", lev) 
lev3 <- gsub("\\]$", "", lev2) 
lev4 <- gsub("\\(|\\)", " ", lev3) 
lev5 <- gsub("^\\[", " ", lev4) 
my.levels <- lev5 

# Create a function to generate a continuous color palette 
rbPal <- colorRampPalette(c('red','blue')) 
[email protected]$Col <- rbPal(10)[as.numeric(cut([email protected]$count, seq(0, 2500, by = 250)))] 

# Plot 
plot(uk, col = [email protected]$Col) 
legend("topleft", fill = [email protected]$Col, legend = my.levels, col = [email protected]$Col) 

screenshot

+0

그게 훌륭합니다. 고마워요! 이것에 해당하는 범례를 만드는 법을 알고 있습니까? – userk

+0

짧은 대답은 '정말로'아닙니다. 위의 편집 된 답변을 참조하십시오. – SlowLearner

0

colorRampPalette을 사용해 보셨나요? 여기

 gradient_color <- colorRampPalette(c("blue", "red")) 
     gradient_color(10) 

[1] "#의 0000FF" "# 1C00E2" "# 3800C6" "#의 5500AA" "# 71008D" "# 8D0071" "당신이 그라데이션 팔레트를 구축하려고 할 수있는 방법입니다 #의 AA0055 " [8]"#의 C60038 ""#의 E2001C ""# FF0000의 "

예 플롯

 plot(rep(1,10),col=gradient_color(10)) 
+0

한 "L"이 "T"의. – mdsumner

+0

예 gradient_color <-colorRampPalette (c ("green", "yellow", "red")) 행을 따라 colorRampPalette를 사용하려고 생각했습니다. 어떻게했는지와 비슷하지만 어떻게해야할지 모르겠습니다. 백작님의 가치관에 적용 해 볼까? 지금까지 감사드립니다! – userk

+1

글쎄, 당신은 우리에게 재현 할 수있는 질문을하지 않았다. (자세한 내용은 [here here] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)) 도움이 어렵습니다. 그러나 셰이프 파일을 질문에 넣는 것은 일반적으로 쉬운 일이 아니지만 (다운로드 링크를 제공 할 수는 있지만) 최소한 데이터가 어떻게 보이는지 보여 주면 도움이 될 것입니다. – SlowLearner

6

좋아, 내가 물린 것이다. plot이 이해하기에는 너무 어려워서 기본 R을 사용하지 않을 것이므로 대신 ggplot2을 사용할 것입니다.

# UK shapefile found via http://www.gadm.org/download 
uk.url <- "http://www.filefactory.com/file/s3dz3jt3vr/n/GBR_adm_zip" 

# replace following with your working directory - no trailing slash 
work.dir <- "C:/Temp/r.temp/gb_map" 

# the full file path for storing file 
file.loc <- paste0(work.dir, "/uk.zip") 

download.file (uk.url, destfile = file.loc, mode = "wb") 
unzip(file.loc, exdir = work.dir) 

# open the shapefile 
require(rgdal) 
require(ggplot2) 
uk <- readOGR(work.dir, layer = "GBR_adm2") 

# use the NAME_2 field (representing counties) to create data frame 
uk.map <- fortify(uk, region = "NAME_2") 

# create fake count data... 
uk.map$count <- round(runif(nrow(uk.map), 0, 2500), 0) 

# quick visual check 
ggplot(uk.map, aes(x = long, y = lat, group = group, fill = count)) + 
    geom_polygon(colour = "black", size = 0.5, aes(group = group)) + 
    theme() 

이렇게하면 다음과 같은 출력이 생성되며, 필요한 결과와 유사 할 수 있습니다. 우리가 ggplot에 맡겨 - 우리가 명시 적으로이 경우에 그라데이션을 지정하지

screenshot

참고. 이러한 세부 사항을 지정하기를 원한다면 가능하지만 더 복잡합니다. 해당 경로를 내려가는 경우 uk.map에 다른 열을 만들어 cut 함수를 사용하여 각 개수를 (말) 10 개 저장소 중 하나에 할당해야합니다. uk.map 데이터 프레임은 다음과 같습니다

> str(uk.map) 
'data.frame': 427339 obs. of 8 variables: 
$ long : num -2.05 -2.05 -2.05 -2.05 -2.05 ... 
$ lat : num 57.2 57.2 57.2 57.2 57.2 ... 
$ order: int 1 2 3 4 5 6 7 8 9 10 ... 
$ hole : logi FALSE FALSE FALSE FALSE FALSE FALSE ... 
$ piece: Factor w/ 234 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ group: Factor w/ 1136 levels "Aberdeen.1","Aberdeenshire.1",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ id : chr "Aberdeen" "Aberdeen" "Aberdeen" "Aberdeen" ... 
$ count: num 1549 1375 433 427 1282 ... 
> 
+0

불행히도 귀하의 도움에 감사드립니다, 내 질문에 나는 어떤 패키지도 설치할 수 없다고 말했지만 이것은 비슷한 상황의 다른 사람들에게 유용 할 것이라고 확신한다! – userk

+0

'ggplot2'도 아니고'maps' 패키지도 없습니다. 확인하기 위해'library()'호출을 했습니까? – SlowLearner

+0

gplot2가 없지만 gplots가 있지만 perl을 설치하지 않았습니다. 지도를 그리기 위해 저는 maptools를 사용하고 있습니다. 그래도 맵 패키지가 있고 엑셀 스프레드 시트에서 데이터를 읽으 려하는데 XLConnect를 사용하고 있습니다. – userk