基于矢量的颜色图

时间:2014-01-09 12:46:25

标签: r

我有一个像这样的矢量z

z <- as.numeric(as.factor(c("A","B","C","D","E","F","G","H")))

和不同日期的数据框df如下

df[[1]]

ID     LON     LAT

A     1        1
B     10        14
C     12        13

df[[2]]

ID     LON     LAT

A     2         3
B     11        18
D     12        13

df[[3]]

ID     LON     LAT

A     13        1
E     10        14
D     12        13

其中ID是z中的ID,但每天都可以不同。

我为矢量

的每个元素指定了一种颜色
range01 <- function(x)(x-min(x))/diff(range(x))
rainbow(7)
cRamp <- function(x){
cols <- colorRamp(rainbow(7))(range01(x))
apply(cols, 1, function(xt)rgb(xt[1], xt[2], xt[3], maxColorValue=255))
} 

我想用每天的颜色cRamp(z)绘制我的df,但到目前为止我还无法将每个df中的ID值与z中的ID值相关联。

这是我的代码:

for (i in 1:length(mydf)){

  plot(df[[i]]$LON,df[[i]]$LAT, col = cRamp(z))
  map(add=T,col="saddlebrown",interior = FALSE)
  legend("topleft", legend=c(unique(df[[i]]$ID)), col=cRamp(z))
}

但是用于例如ID A每天都不一样!

非常感谢!

1 个答案:

答案 0 :(得分:0)

您希望在df[[j]]$ID中找到z值的相应索引。这是一个简单的方法。

Rgames> foo<-c('a','b','c','d')
Rgames> bar <- c('b','d','a')
Rgames> indmatch <- match(bar,foo) 
# As Roland pointed out, much better than "sapply(bar,function(j)which(foo==j))"

#b d a 
#2 4 1

因此,如果您使用该输出,您可以将其用作颜色的索引:

col=cRamp(z)[indmatch]