R решетчатых цветов с асимметричным цветовым градиентом - PullRequest
0 голосов
/ 10 мая 2018

Я использую R lattice() для создания трехмерного каркасного графика. Цветовая гамма поверхности варьируется от -0,6 до +0,2. Я создал сине-бело-красную схему градиента цвета:

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. </p>

Я знаю, что увеличение масштаба от -0,6 до +0,6 решило бы эту проблему, но это заняло бы слишком малую часть оси z. Я также знаю, что функция scale_colour_gradient2() может достичь того, что я хочу (она позволяет вам установить значение средней точки), но это функция ggplot2(), и я в lattice(), поскольку ggplot2() не выполняет 3- Такие поверхности D (если я что-то пропустил).

Вот как выглядит мой сюжет. Он запроектирован в углу рамки - это поле размером 13x9, которое будет сравниваться с другим графиком, содержащим поле размером 24x16.

enter image description here

1 Ответ

0 голосов
/ 10 мая 2018

Вот один подход:

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))

enter image description here

в вашем случае вам, вероятно, понадобится:

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