2013-10-12 3 views
1

과 관련된 질문이 있습니다. 숫자 값에 따라지도에서 다른 국가의 색상을 채색하려고합니다. 이제는 모든 국가의 가치가 없기 때문에 일부 국가는 비어 있습니다.색칠 맵 R의 수치를 기반으로

Year Country  Numeric 
2009 Afghanistan 

이와같이. 그래서 제가> 5, 5-10 등과 같은 특정 레벨에 기초한 가치를 얻을 때, 저는 그것들을 다른 색깔로 채우기를 원합니다. 어떻게해야합니까 R? 나는 상당한 진전없이 상당한 시간을 보냈다.

세계지도를 채울 수는 있지만 가지고있는 데이터를 조작 할 수는 없습니다.

> p <- ggplot(world, aes(long,lat,group=group)) + 
    geom_polygon(fill="darkgreen",colour="white") + 
    theme(panel.background = element_rect(fill = "lightsteelblue2")) 

모든 조언과 조언을 부탁드립니다.

답변

2

aes의 일환으로 fill을 포함 :

library(maps) 
world<-map_data("world") 

set.seed(123) 
w2<-data.frame(world,data=sample(10,length(unique(world$group)),T)[world$group]) 

ggplot(w2,aes(long,lat,group=group,fill=data))+ 
    geom_polygon(color="white")+ 
    scale_fill_gradient(low="lightgreen",high="darkgreen")+ 
    theme(panel.background = element_rect(fill = "lightsteelblue2")) 

enter image description here

+0

그게 정말 맛있어. 나는 그것을 줄거야. 너와 내가 도울 수있는 한가지는 내가 문서에서 찾을 수없는 것 같아. 국가. 데이터에 누락 된 국가가 있다고 가정하면 해당 국가의 색상이 부적절하거나 NA 값으로 표시 될 수 있습니까? –

+0

색상 그라디언트에서 NA 값의 색상을 지정할 수 있습니다 (예 : 'scale_fill_gradient (low = "lightgreen", high = "darkgreen", na.value = "black")'). "NA"가 전설에 나타나기를 원한다면, 그것은 더 까다 롭습니다. – mrip

3

당신은 (예를 들어, S.Sudan을 포함하여 현대적인지도를 갖고, 예를 들어 소련을 제외한의 장점을 가지고있는) rworldmap 사용할 수 있습니다. 지도는 기본이 세계지도에 적합한 굵은 (3 해상도에서 사용할 수있는

library(rworldmap) 

#example data including an NA 
country <- c('Afghanistan','Albania','Algeria','Andorra','Angola','Antigua and Barbuda') 
data <- c(NA, 8.53, 8.64, 21.25, 10.08, 9.07) 

dF <- data.frame(country=country, data=data) 

#join data to a map to create a spatialPolygonsDataFrame 
sPDF <- joinCountryData2Map(dF, joinCode='NAME', nameJoinColumn='country') 

#default map (see rworldmap documentation for options e.g. catMethod, numCats, colourPalette, mapRegion) 
#missingCountryCol used for NA and countries not in the join file 
mapCountryData(sPDF, nameColumnToPlot='data', missingCountryCol='dark grey') 

rworldmap plot

+0

팁 친구를 보내 주셔서 감사합니다! @ mrip의 조언을 사용하고 rworldmap 라이브러리를 사용하여 이미 대답을 얻었습니다. 내가 개발 한 것을 보여주기 위해 코드를 게시 할 것이다. 그래도 시간 내 주셔서 감사 드리며 사용하려는 코드에 대해 알고 계실 것입니다. –

1

이것은 기본적으로 내가 할 필요가 무엇을 해결하는 데 사용되는 코드입니다.

library(xlsx) 
library(maps) 
library(maptools) 
library(mapproj) 
library(mapdata) 
library(rworldmap) 
library(countrycode) 

d <- read.xlsx("health_expenditure.xlsx",2) 
d.df <- data.frame(d) 
d.sub <- subset(d.df,Year=="2009") 
w4 <- data.frame(d.sub$Country,data=d.sub$Numeric.Value) 
colnames(w4)[1] <- "country" 
w4$breaks <- cut(w4$data, 5) 
w4$code <- countrycode(w4$country,"country.name","iso3c") 
sPDF <- joinCountryData2Map(w4,joinCode="ISO3",nameJoinColumn="code") 
par(mai=c(0,0,0.2,0),xaxs="i",yaxs="i") 
mapDevice() 
mapCountryData(mapToPlot=sPDF, nameColumnToPlot="breaks",missingCountryCol="white",oceanCol="lightsteelblue2",colourPalette="heat",mapTitle="Health Expenditure") 

Health Expenditure in 2009

관련 문제