美国地图上的美国县使用颜色强度的数字变量

时间:2015-04-01 22:34:22

标签: r maps geospatial choropleth

我有一个数据框'mydata.final'(见下文),其中包含美国县和一个连续数字变量'Mean.Wait',范围从0到10左右。我还创建了基于'Mean.Wait'的变量'wait',并将离散值从1('Mean.Wait'上的最低值)变为5('Mean.Wait'上的最高值)。

我可以创建一张美国地图,根据使用R套餐'地图'的'等待'的值着色县:

######################################################################
### Generating an artificial data file:
######################################################################

library(maps)
mydata.final <- data.frame(county = (map('county', plot = FALSE)$names),
                 stringsAsFactors = F)

### My numeric variable:
set.seed(123)
mydata.final$Mean.Wait <- runif(nrow(mydata.final)) * 10

### Introducing NAs to mimic my real data set:
set.seed(1234)
mydata.final$Mean.Wait[sample(1:nrow(mydata.final), 1500)] <- NA

### Cutting the original numeric variable into categories
### because I don't know how to color based on 'Mean.Wait':
mydata.final$wait <- cut(mydata.final$Mean.Wait, breaks = 5)
levels(mydata.final$wait) <- 1:5
mydata.final$wait <- as.numeric(as.character(mydata.final$wait))

######################################################################
### Building a US map based on 'wait' (5 categories)
######################################################################

### Creating my 5 colors:
pal <- colorRampPalette(c("yellow", "red"))
allcolors <- pal(5)

### Looking at my 5 colors:
barplot(1:5, rep(1,5), col = allcolors, horiz = T)

### Builiding the US map using 5 categories in 'wait':
map('county', fill = TRUE, col = allcolors[mydata.final$wait],
            resolution = 0, lty = 0, bg = "transparent")
map('state', lwd=1, add=TRUE)

我的目标是:不是将'Mean.Wait'分成5个有序类别('等待'),我想根据我的(连续)'Mean.Wait'的强度为地图上的县着色。 。怎样做,甚至可以添加一个传奇?非常感谢!

1 个答案:

答案 0 :(得分:0)

您在4月2日的R-help上也提到了这个问题。这是答案。

您可以使用colorRamp()rgb()来获得更多连续色彩。 例如

newpal <- colorRamp(c("yellow", "red"))
missing <- is.na(mydata.final$Mean.Wait)
newcol <- ifelse(missing, "white",

rgb(newpal(mydata.final$Mean.Wait[!is.na(mydata.final$Mean.Wait)]/
                                  max(mydata.final$Mean.Wait,
na.rm=T)), maxColorValue=255))
map('county', fill=TRUE, col=newcol,
    resolution=0, lty=0, bg="transparent")
map('state', lwd=1, add=TRUE)

您还可以尝试使用plotrix中的color.scale函数 在通话中指定NA颜色。

library(plotrix)   newcol<-color.scale(mydata.final$Mean.Wait,extremes=c("yellow","red"),na.color="white")