【问题标题】:Adding a Dendrogram to a ggplot2 Heatmap将树状图添加到 ggplot2 热图
【发布时间】:2016-12-08 05:09:20
【问题描述】:

这里是新的 R 用户。 我正在尝试向我使用 ggplot2 创建的热图添加树状图。我怎样才能做到这一点?我已将我的代码添加到下面的热图中。

#Mtcars using ggplots and reshape2 
install.packages("ggplot2")
library(ggplot2)
intall.packages("reshape2")
library(reshape2)
data(mtcars)
Cars <- mtcars[c(1:7)] #subset to 6 genres

cor(Cars) # 6x6 cor matrix

#ggplot likes the data 'melted' one value per row
m <-melt(cor(Cars)) 
p <- ggplot(data=m, aes(x=Var1, y=Var2, fill=value)) + geom_tile()
p

#set up a coloring scheme using colorRampPalette
red=rgb(1,0,0); green=rgb(0,1,0); blue=rgb(0,0,1); black=rgb(0,0,0)
RtoBrange<-colorRampPalette(c(red, black ) )
BtoGrange<-colorRampPalette(c(black, green) ) 

p <- p + scale_fill_gradient2(low=RtoBrange(100), mid="black",           high=BtoGrange(100))
p

感谢您的帮助,

夏洛特

【问题讨论】:

  • 也许ggdendro 包可以帮助您解决这个问题?
  • 有一个很好的例子here 使用ggdendroplotly
  • @MattSandgren 我鼓励你看看dendextend。它有一个用于使用 ggplot2 创建树状图的叉子,它保留了图形参数,例如树的颜色和线宽。见这里:cran.r-project.org/web/packages/dendextend/vignettes/…

标签: r colors heatmap dendrogram


【解决方案1】:

使用 gplots 包 (https://cran.r-project.org/web/packages/gplots/gplots.pdf) 中的 heatmap.2 函数,它会自动将树状图添加到您的热图中。使用您的示例:

install.packages("gplots")
library(gplots)

data(mtcars)
Cars <- mtcars[c(1:7)]

mycolors <- colorRampPalette(c("red", "black", "green"))
heatmap.2(cor(Cars), trace = "none", col = mycolors)

【讨论】:

    【解决方案2】:

    这有点棘手,因为并非所有部分都已完全准备好,但这是我在heatmaply 开始的工作的目标,以达到这一点。如果您对此感兴趣,以便使用 plotly 创建带有树状图的交互式热图,那么您应该查看heatmaply vignette

    如果您对静态热图感兴趣,我相信现有的软件包已经做得很好,因此重新发明这个轮子可能不值得。 但如果这仍然是您想要做的,这里是它的主要步骤:

    1. 生成树状图对象
    2. 在 ggplot2 中绘制树状图对象
    3. 以尊重行(或树状图中的列)顺序的方式创建热图
    4. 合并对象。

    第一步可以使用hclustas.dendrogram,第二步需要dendextend的[as.ggdend][2]函数。第 3 步可以使用 heatmaply::heatmapr + heatmaply:::ggplot_heatmap 来完成(目前是隐藏的,但将来会为这种类型的东西公开)。第 4 步很棘手,到目前为止,我无法让它“足够好”地工作,因为元素的比例不好。

    我将它封装到一个新的 ggheatmap 函数中,然后将其上传到 heatmaply on github。但这需要更多的工作,所以我愿意接受请求。同时,这里是如何做到这一点:

    devtools::install_github("ropensci/plotly") # you will probably benefit from the latest version of plotly
    devtools::install_github('talgalili/heatmaply')
    
    library(heatmaply)
    x <- heatmapr(iris[,-5], scale = "column", colors = "Blues")
    ggheatmap(x)
    

    输出如下所示:

    由于我使用的是GGally::ggmatrix,我似乎无法控制每个对象的比例。在其他方面可能还有更多工作要做(例如处理标签的布局,在侧面添加颜色图例等)

    【讨论】:

    • ggheatmap 不在heatmaply 中了,对吧?它在版本 0.8.3 中,但不在当前版本中 0.11.1
    • 嗨@deeenes,这是正确的。 ggheatmap 功能被删除,因为它不够完善。但是,您可以使用“文件”参数将热图交互式输出保存到静态文件中。我还添加了一个问题,可能会在将来添加 ggheatmap...github.com/talgalili/heatmaply/issues/108
    【解决方案3】:

    或者试试heatmap3函数:

    library(heatmap3)
    Cars <- mtcars[c(1:7)]
    heatmap3(cor(Cars), scale = "none", sym = T)
    

    【讨论】:

    • heatmap3 很棒 - 但它不是基于 ggplot2
    • 是的,你完全正确。也许他不想重新发明轮子。否则你的方法似乎是一个解决方案。
    • 同意。 :)(我也更喜欢使用现有的解决方案之一)
    猜你喜欢
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    相关资源
    最近更新 更多