2013-06-18 2 views
2

У меня есть растровые объекты с категориальными значениями (-1,0,1) или некоторые значения с искаженными распределениями, которые я хочу построить с помощью levelplot. Я хочу иметь разные цвета для отрицательных значений, чем для положительных, а белый - для значений около 0. Я хочу, чтобы шкала показывала только несколько дискретных шагов, поскольку я хочу, чтобы расстояние не равно расстоянию и диапазоны иногда были очень узкими. Я используюlevelplot: как настроить уровни шкалы (at) и метки шкалы (метки)

= список цветового ключа (в = с(), метко = с())

передать аргументы levelplot. Это работает для масштаба, но цветовое кодирование фактических значений не равно тому, что отображается на шкале. Если я использую аргумент

при = C()

исключительно, масштаб-значение и значение в решетке соответствующие. Если я добавлю labels=c() также независимо, они не будут отображаться на шкале, а только на контурных линиях. Мой вопрос:

Как я могу пометить свой масштаб, установить 'at', а значения в решетке соответствуют значениям моего масштаба в одно и то же время? Вот несколько примеров данных:

library(raster) 
library(colorspace) 
library(rasterVis) 
X <- raster(nrow=10,ncol=10) 
set.seed(1) 
X[] <- rchisq(df=10,n=10*10)*c(1,-1) 
X[X[]>0] <- X[X[]>0]+seq(1,100,length.out=length(X[X[]>0])) 
Uniques <- cellStats(X,stat=unique) 
Uniques.max <- max(Uniques) 
Uniques.min <- min(Uniques) 
Acol.regions <- colorspace::diverge_hsv(n=9) 

Если я использую цветовой ключ:

levelplot(X, col.regions = Acol.regions,colorkey=list(
    at=round(c(seq(Uniques.min,0,length.out=5)[-5],0,seq(0,Uniques.max,length.out=5)[-1]),2), 
    labels=as.character(round(c(seq(Uniques.min,0,length.out=5)[-5],0,seq(0,Uniques.max,length.out=5)[-1]),2)*2)), 
      margin=F) 

Я заканчиваю с правильным способом отображения шкалы, но значения в решетке ошибочно перекрасить: correct scale but wrong values in the lattice

Если я отдельно передать at=c(), labels=c():

levelplot(X, col.regions = Acol.regions, 
    at=round(c(seq(Uniques.min,0,length.out=5)[-5],0,seq(0,Uniques.max,length.out=5)[-1]),2), 
    labels=as.character(round(c(seq(Uniques.min,0,length.out=5)[-5],0,seq(0,Uniques.max,length.out=5)[-1]),2)*2), 
      margin=F) 

я в конечном итоге с соответствующими значениями в масштабе и решетки, но метки не отображаются: enter image description here

С уважением, Эрик

ответ

2

Решено: я заявил at=c() аргумент дважды. Как только прямо в levelplot, а затем в colorkey-list

levelplot(X, col.regions = Acol.regions,at=round(c(seq(Uniques.min,0,length.out=5)[-5],0,seq(0,Uniques.max,length.out=5)[-1]),2), 
      colorkey=list(
    at=round(c(seq(Uniques.min,0,length.out=5)[-5],0,seq(0,Uniques.max,length.out=5)[-1]),2), 
    labels=as.character(round(c(seq(Uniques.min,0,length.out=5)[-5],0,seq(0,Uniques.max,length.out=5)[-1]),2)*2)), 
      margin=F) 

Спасибо всем, кто мог бы попробовать. Eric

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