2014-01-09 4 views
0

У меня есть вектор 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 s являются те, в z, но может быть разные для каждого дня.

Я назначен цвет для каждого элемента вектора

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)) 
} 

и что я хотел бы сделать, это построить на каждый день мой df с цветами cRamp(z), но я не в состоянии связать ID значение в каждом df с одной в z

Вот мой код

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

    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)) 
} 

, но цвет, например. IDA не то же самое для каждого дня!

Большое спасибо

+0

Просьба представить воспроизводимые данные, особенно 'dput (г)'. 'range01 (z)' приводит к ошибке в x - min (x): нечисловой аргумент двоичному оператору 'с символьным вектором. – Roland

+0

См. Отредактированный пост – user3036416

+0

Почему 'as.numeric (as.factor (...))'? Это очень странный способ написания 'seq_along (...)'. –

ответ

1

Может быть что-то вроде этого:

z <- LETTERS[1:7] 

df <- list(
    data.frame(ID=LETTERS[1:3], 
      LON=c(1,10,12), 
      LAT=c(1,14,13)), 
    data.frame(ID=LETTERS[3:5], 
      LON=c(2,11,18), 
      LAT=c(2,9,20)) 
) 


layout(t(1:2)) 
for (i in 1:2){ 
    plot(df[[i]]$LON, df[[i]]$LAT, 
     col = rainbow(length(z))[match(df[[i]]$ID,z)], 
     pch=16) 
    legend("topleft", 
     legend=z, 
     col=rainbow(length(z)), 
     pch=16) 
} 

enter image description here

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