【问题标题】:Heatmaps for a matrix with ones and zeros using R使用 R 的带有 1 和 0 的矩阵的热图
【发布时间】:2017-12-27 12:10:40
【问题描述】:

下面是我的示例数据,基本上是一个以行名作为人名的矩阵 以及这些行中的每一行的一些列。我在数据中只有零和一。我想使用热图将其可视化。 (红色代表 0,绿色代表 1 或任何其他颜色编码)。如何使用 R 完成此任务?您可以向我展示使用任何只有 1 和 0(二进制值)的示例数据集。

【问题讨论】:

标签: r heatmap


【解决方案1】:

使用 ggplot 的另一种方法

library(ggplot2)
library(reshape2)
library(plyr)
library(scales)

df <- structure(list(people = structure(c(2L, 1L), .Label = c("Dwayne", "LeBron"), class = "factor"),
                 G = c(1L, 0L),
                 MIN = c(1L, 0L),
                 PTS = c(0L, 1L),
                 FGM = c(0L,0L),
                 FGA = c(0L,0L),
                 FGP = c(1L,1L)),
            .Names = c("people", "G", "MIN", "PTS", "FGM", "FGA", "FGP"),
            class = "data.frame",
            row.names = c(NA, -2L))


df.m <- melt(df)
df1.m <- ddply(df.m, .(variable), transform, rescale = value)
p <- ggplot(df1.m, aes(variable, people)) +
geom_tile(aes(fill = rescale), colour = "black")
p + scale_fill_gradient(low = "green", high = "red")
show(p)

从此tutorial采用

【讨论】:

    【解决方案2】:

    highcharter:

    library(highcharter)
    library(tidyr)
    library(dplyr)
    df<-data.frame(row=c("Dwayne","James"),G=c(1,0),MIN=c(1,0),PTS=c(0,1),FGM=c(0,0),FGA=c(0,0),FGP=c(1,1))
    rownames(df)<-c("Dwayne","James")
    df$row<-rownames(df)
    data<-df%>%
         tidyr::gather(row,value)%>%
         setNames(c("name","variable","value"))
    
    
    hchart(data, "heatmap", hcaes(x = variable, y = name, value = value)) %>% 
      hc_colorAxis(stops = color_stops(2, c("red","green")))
    

    更新: 您可以为 height=800 添加hc_size(height = 800) 或制作类似的东西

      x<-50
      hg<-length(unique(data$name))*x+100
    
      hchart(data, "heatmap", hcaes(x = variable, y = name, value = value)) %>% 
        hc_colorAxis(stops = color_stops(2, c("red","green")))%>% 
        hc_size(height = hg)
    

    数据集中的每一行使图表变大 50 点。您可以在x中更改它

    【讨论】:

    • 为什么不直接使用image函数,或者任何其他“单命令热图函数”,例如pheatmapheatmap.2等?
    • 谢谢,它起作用了,但是我有超过 200 行要显示,并且输出似乎被压缩显示在页面中。我不希望行被挤压,因为它使可视化不清楚。我可以使用滚动条将其拉下,但我希望可视化清晰。我该如何完成它?
    • @yome 希望hc_size(height = 800) 可以修复它
    • @jyjek 感谢更新,它很完美,但实际值显示在热图上。我希望它无论如何都显示,但不是“实际”值。我想展示的方式是,无论哪里有绿色热图(非零值),我都不想展示任何数字 5。我应该在哪里调整代码?
    • @jyjek else 如何更改热图中显示的值的颜色?
    【解决方案3】:

    此答案使用plotly,因此将其添加为另一个答案。使用与以下相同的数据。

    library(plotly)
    df1 <- as.matrix(df)
    p <- plot_ly(x = colnames(df), y = df[,1], z = as.matrix(df[-1]), colors = colorRamp(c("green", "red")), type = "heatmap")
    

    在获取输出方面,这比 ggplot2 简单得多。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2013-02-28
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多