具有不对称颜色渐变的 R 格子颜色

R lattice colors with asymmetric color gradient

我正在使用 R lattice() 制作 3D 线框图。表面的色标范围从 -0.6 到 +0.2。我创建了一个 blue-white-red 颜色渐变方案:

bwr.colors <- colorRampPalette(c("blue, "white", "red"))

并且正在像这样创建情节:

gca_plot <- wireframe(dev ~ col*row, data=gca, 
           xlab = "col",
           xlim = c(1, 24),
           ylab = "row",
           ylim = c(9, -6),
           zlim=c(-0.6, 0.2),
           main = "GCA",
           drape = TRUE,
           colorkey = TRUE,
           at=do.breaks(c(-0.6,0.2),100),
           scales = list(arrows=FALSE,cex=.5, tick.number = 10, z = list(arrows=F), distance =c(1.5, 1.5, 1.5)),
           col.regions = bwr.colors(100),
           screen = list(z = 30, x = -60))

问题是我想将颜色(白色)居中为零,因为这是一个偏差图。我想要红色值 > 0 和蓝色值 < 0。

我知道将我的比例 运行 从 -0.6 调整到 +0.6 可以解决这个问题,但这会占用 z-axis 的 much-too-small 部分。我也知道 scale_colour_gradient2() 函数可以实现我想要的(它允许你设置中点值),但那是一个 ggplot2() 函数,我在 lattice() 因为 ggplot2() 不会像这样处理 3-D 表面(除非我遗漏了什么)。

这是我的情节。它被设计成挤在框架的一角——它是一个 13x9 的区域,将与包含 24x16 区域的不同图进行比较。

这是一种方法:

library(lattice)

bwr.colors <- colorRampPalette(c("blue", "white", "red"))

一些绘图数据:

g <- expand.grid(x = 1:10, y = 5:15)
g$z <- log(g$x^2 + g$y^2)

通过控制 at 参数中的值,例如:

c(do.breaks(c(3, 4),49), do.breaks(c(4, 6),49))

将创建 100 个值,其中前 50 个值介于 3 和 4 之间,另外 50 个值介于 4 和 6 之间

wireframe(z ~ x*y, data=g, 
          xlab = "col",
          ylab = "row",
          main = "GCA",
          drape = TRUE,
          colorkey = TRUE,
          at = c(do.breaks(c(3, 4),49), do.breaks(c(4, 6),49)),
          scales = list(arrows = FALSE,
                        cex = .5,
                        tick.number = 10,
                        z = list(arrows=F),
                        distance =c(1.5, 1.5, 1.5)),
          col.regions = bwr.colors(100),
          screen = list(z = 30, x = -60))

在您的情况下,您可能需要:

c(do.breaks(c(-0.6, 0),49), do.breaks(c(0, 0.2),49))