我有一个数据框'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'的强度为地图上的县着色。 。怎样做,甚至可以添加一个传奇?非常感谢!
答案 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")