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)
我想用 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)