Создание легенды, ключа или цветовой шкалы для цветового градиента в изображении R () - PullRequest
2 голосов
/ 14 ноября 2011

В сеансе R, задано:

foo <- matrix(1:25, 5, 5)
image(foo)

Как мне лучше всего добавить легенду или ключ для цветового градиента, используемого на этом image() графике foo?

Это для большого набора данных о глобальных значениях осадков, поэтому взлом чего-либо вместе с legend() не представляется приемлемым вариантом.filled.contour() имеет ряд побочных эффектов, которые меня не устраивают.Я использую image(), потому что это самый простой метод построения слоя или добавления.

На данный момент, моя самая большая проблема с filled.contour() заключается в том, что я пытаюсь добавить контуры из другого набора данных.через contour() к участку.При filled.contour() контуры необходимо будет скорректировать с учетом ключа градиента по умолчанию на стороне графика, хотя я полагаю, что это также будет иметь место, если я добавлю ключ к графику image().

Спасибо за ваше время.

Для дальнейшего использования:

При использовании filled.contour() вы можете позвонить contour() и / или map()в дополнение к любой другой функции, которая вам нравится, присваивая ей аргумент filled.contour() plot.axes.Может быть полезно помнить, что вы можете сложить несколько строк кода с помощью фигурных скобок.

1 Ответ

3 голосов
/ 14 ноября 2011

Вот некоторый код, адаптированный из пакета zernike. Вы можете использовать все это или просто вытащить кусок, который создает градиентный ключ.
# написано 13 апреля 2011 г. CGWitthoft. Следите за обновлениями от
# владелец пакета zernike.

 pupilplot <- function (wf, cp = NULL, col = topo.colors(256), addContours = FALSE, 
cscale = TRUE, ...) 
 {
     if (cscale) {
         mar.orig <- (par.orig <- par(c("mar", "las", "mfrow")))$mar
        on.exit(par(par.orig))
        w <- (3 + mar.orig[2]) * par("csi") * 2.54
        layout(matrix(c(2, 1), ncol = 2), widths = c(1, lcm(w)))
        par(las = 1)
        mar <- mar.orig
        mar[4] <- mar[2]
        mar[2] <- 1
        par(mar = mar) 
    thelist <- list(...)  
    findz <- which(names(thelist) == 'zlim')  
    if (length(findz) > 0 ) {   
        zlim <- thelist$zlim  
        }else{  
                zlim <- range(wf, finite = TRUE) #the original line  
        } 
 # end of my hack  
        levels <- seq(zlim[1], zlim[2], length = length(col))
        plot.new()
        plot.window(xlim = c(0, 1), ylim = range(levels), xaxs = "i", yaxs = "i")
        rect(0, levels[-length(levels)], 1, levels[-1], col = col,  density = NA)
        axis(4)
         box()
        mar <- mar.orig
        mar[4] <- 0
        par(mar = mar)
    }
    if (is.null(cp)) {
        axis1 <- 1:nrow(wf)
        axis2 <- 1:ncol(wf)
    }
    else {
         axis1 <- ((1:nrow(wf)) - cp$xc)/cp$rx
        axis2 <- ((1:ncol(wf)) - cp$yc)/cp$ry
    }
    image(axis1, axis2, wf, col = col, asp = 1, xlab = "X", ylab = "Y",  ...)
     if (addContours) 
        contour(axis1, axis2, wf, add = TRUE)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...