代码之家  ›  专栏  ›  技术社区  ›  P. Denelle

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

  •  1
  • P. Denelle  · 技术社区  · 6 年前

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

    enter image description here

    现在 绘声绘色地 ,我无法获得与一列相关的高度(此处 freq )和另一个颜色(列 variable ). 下图将高度和颜色与 频率 .

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

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  1
  •   MLavoie    6 年前

    你在找这样的东西吗?

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

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

        2
  •  0
  •   P. Denelle    6 年前

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

    enter image description here