在R会话中,给出:
foo <- matrix(1:25, 5, 5)
image(foo)
为image()
foo
的{{1}}地块添加颜色渐变添加图例或关键字的最佳方法是什么?
这是针对全球降水值的大型数据集,因此与legend()
一起黑客攻击似乎不是一个可行的选择。 filled.contour()
有许多我不满意的副作用。我正在使用image()
因为它是最简单的绘图方法来分层或添加。
目前,filled.contour()
的最大问题是我正在尝试通过contour()
将不同数据集中的轮廓添加到情节中。使用filled.contour()
时,需要调整轮廓以考虑绘图侧面的默认渐变键,但我想如果我在image()
绘图中添加了一个键也会出现这种情况。
非常感谢你的时间。
供将来参考:
使用filled.contour()
时,您可以将contour()
和/或map()
分配到filled.contour()
plot.axes
{{1}}以外的任何其他功能。参数。记住你可以用大括号堆叠多行代码可能会有所帮助。
答案 0 :(得分:3)
以下是一些改编自zernike软件包的代码。您可以全部使用它,或者只是拉出创建渐变键的部分 #CGWitthoft于2011年4月13日撰写。注意来自的更新 #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)
}