R plotly,在 3D 热图上有不同的颜色和 z 轴

R plotly, have different color and z-axis on 3D heatmap

我想用 plotly 绘制 3D 热图,但我希望颜色渐变独立于 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

您在找这样的东西吗?

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

我认为 surfacecolor 你可以得到你想要的。

根据@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)