Как добавить галочку или полосу на цветовую шкалу для графика уровней в R

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

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

library(lattice)

mat <- matrix(rnorm(25),ncol=5,nrow=5)
cov.m <-  cov(mat[,1:5],mat[1:5,])

levelplot(cov.m,  xlab="", ylab="", 
          col.regions= colorRampPalette(c("blue","white","red"), 
          space = "rgb"), cuts=100, at=seq(-0.2,1,0.005))

Теперь я хочу указать 0,18 на соседней цветовой шкале.

ОБНОВЛЕНИЕ: я попытался добавить abline к plot.trellis и не получил ни ошибки, ни предупреждения, но, похоже, оно было проигнорировано. Возможно, я даже не правильно взламываю исходный код. У кого-нибудь есть пошаговые инструкции о том, как изменить код в пакете решетки в контексте этого вопроса?


person asdf    schedule 08.09.2013    source источник


Ответы (2)


Попробуйте использовать yscale.components=yscale.raster.subticks. Например:

levelplot(cov.m, 
       col.regions= colorRampPalette(c("blue","white","red"), space = "rgb"), 
       at=seq(-0.2,1,0.005)),
       yscale.components=yscale.raster.subticks,
       xscale.components=xscale.raster.subticks,
       margin=FALSE, 
       ylab='Y', 
       xlab='X', 
       main='Plot Name')
person Eko Susilo    schedule 24.04.2015

(Более расширенный комментарий к стратегии, чем окончательный ответ.) Если вы хотите использовать функции построения сетки в контексте кода levelplot, вам нужно будет «глубоко погрузиться» в пакеты lattice и grid.

 methods(levelplot)
 getAnywhere(lattice.matrix)
 getAnywhere(lattice.formula)
 getAnywhere(construct.legend)
 lev <- levelplot(cov.m,  xlab="", ylab="", 
      col.regions= colorRampPalette(c("blue","white","red"), 
      space = "rgb"), cuts=100, at=seq(-0.2,1,0.005))
 lev$legend
 methods(print)
 getAnywhere(print.trellis)
 getAnywhere(plot.trellis)

Линии рисования легенды в функции plot.trellis находятся внизу. Вы можете создать новый plot.trellis и использовать update.trellis для изменения узла легенды объекта-решетки. Или вы можете взломать и попытаться разместить аннотацию на основе сетки.

person IRTFM    schedule 08.09.2013
comment
Я не очень разбираюсь в R, но я постараюсь следовать вашим словам. ЕСЛИ вы можете получить рабочую версию хака для моего примера, это было бы здорово - person asdf; 08.09.2013
comment
Я предполагаю, что моей первой попыткой будет взломать код plot.trellis, чтобы сообщить диапазон значений, используемых в области просмотра, которая рисует цветовой ключ. (Но сегодня у меня не будет времени поэкспериментировать с этим, поэтому это должен сделать кто-то другой.) - person IRTFM; 08.09.2013