2013-10-12 5 views
1

У меня есть вопрос, связанный с R. Я пытаюсь покрасить область для разных стран на карте, основанной на числовом значении. Теперь у меня нет значений для всей страны, поэтому некоторые из них будут пустыми.Раскраска на основе числового значения в 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

Включите fill как часть вашего aes:

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

Это выглядит действительно хорошо. Я собираюсь отдать это. Одна вещь, которую вы могли бы мне помочь, я не могу найти в докюме ntation. Предположим, что у моих данных отсутствуют страны, что я могу сделать, чтобы указать эти страны как недействительные или значения NA с некоторым цветом? –

+0

Вы можете указать цвет значений NA в градиенте цвета, например 'scale_fill_gradient (low =" lightgreen ", high =" darkgreen ", na.value =" black ")'. Если вы хотите, чтобы «NA» появлялось в легенде, это сложнее. – mrip

3

Вы можете использовать rworldmap (который имеет то преимущество, что современная карта, включая, например S.Sudan и исключения, например, Советского Союза). Карты доступны в 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

Смежные вопросы