1

我想绘制一个 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

在此处输入图像描述

4

2 回答 2

1

你在寻找这样的东西吗?

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

我想和surfacecolor你一起可以得到你想要的。

于 2018-02-02T19:57:09.653 回答
0

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

在此处输入图像描述

于 2018-02-03T17:29:53.907 回答