R сюжетно, имеют другой цвет и ось Z на 3D тепловой карте

Я хочу построить 3D-тепловую карту с plotly, но я хотел бы, чтобы цветовой градиент не зависел от оси Z.

С помощью ggplot2 я могу создать следующее изображение:

dat <- data.frame("cat1" = sort(rep(seq(1:6), 6)),
                  "cat2" = rep(seq(1:6), 6),
                  "variable" = round(rnorm(36), 1),
                  "freq" = seq(100, (100-35)))

library(ggplot2)
ggplot(data.frame(dat), aes(cat1, cat2, fill = variable, label = freq)) + 
  geom_tile() +
  geom_text()

введите здесь описание изображения

И теперь с plotly я не могу связать высоту с одним столбцом (здесь freq) и цвет с другим (столбец variable). На следующем изображении высота и цвет связаны с freq.

library(plotly)
mat <- tapply(dat$freq, list(dat$cat1, dat$cat2), sum)
plot_ly(z = ~ mat) %>% add_surface

введите здесь описание изображения


person P. Denelle    schedule 02.02.2018    source источник


Ответы (2)


Вы ищете что-то подобное?

plot_ly(z=~mat, type="surface", surfacecolor = matrix(nrow = 6, ncol = 6, rep(1:6, each = 6))

Я думаю, что с surfacecolor вы можете получить то, что хотите.

person MLavoie    schedule 02.02.2018

Основываясь на предложении @MLavoie, я нашел способ декоррелировать цвет и высоту 3D heatmap.

dat <- data.frame("cat1" = sort(rep(seq(1:6), 6)),
                  "cat2" = rep(seq(1:6), 6),
                  "variable" = round(rnorm(36), 1),
                  "freq" = seq(100, (100-35)))
library(plotly)
mat <- tapply(dat$freq, list(dat$cat1, dat$cat2), sum)
mat_col <- tapply(dat$variable, list(dat$cat1, dat$cat2), sum)

plot_ly(z = ~ mat, type = "surface", surfacecolor = mat_col)

введите здесь описание изображения

person P. Denelle    schedule 03.02.2018