草庐IT

tidyHeatmap(一):带你绘制高端热图

生信宝库 2023-10-07 原文

前言

Immugent最近注意到,生信宝库好久没有更新有关基础绘图的推文了,于是专门去找了最近常常碰到的专注于绘制热图的tidyHeatmap包的教程来学习了一下,现在分享给大家。

其实绘制热图的R包有很多了,从最开始的Pheatmap包,再到后来的ComplexHeatmap包,都是专门用来绘制热图的。事实上,今天介绍的这款tidyHeatmap包是在ComplexHeatmap包的基础上进行优化,简化了很多的操作。但是值得注意的是,tidyHeatmap包需要安装的依赖包较多,也需要最新的版本,最好安装GitHub版本,否则下面的部分功能使用不了。


代码展示

安装tidyHeatmap包,并导入示例数据。。

devtools::install_github("stemangiola/tidyHeatmap")

library(tidyHeatmap)

mtcars_tidy <- 
    mtcars |> 
    as_tibble(rownames="Car name") |> 
    
    # Scale
    mutate_at(vars(-`Car name`, -hp, -vs), scale) |>
    
    # tidyfy
    pivot_longer(cols = -c(`Car name`, hp, vs), names_to = "Property", values_to = "Value")

mtcars_tidy

浅画一个热图

mtcars_heatmap <- 
    mtcars_tidy |> 
    heatmap(`Car name`, Property, Value,    scale = "row"   ) |>
    add_tile(hp)

mtcars_heatmap

#Saving
mtcars_heatmap |> save_pdf("mtcars_heatmap.pdf")
图片

Grouping and splitting

# Make up more groupings
mtcars_tidy_groupings = 
    mtcars_tidy |>
    mutate(property_group = if_else(Property %in% c("cyl", "disp"), "Engine", "Other"))

mtcars_tidy_groupings |> 
    group_by(vs, property_group) |>
    heatmap(`Car name`, Property, Value,    scale = "row"   ) |>
    add_tile(hp)
图片

provide colour palettes to groupings

mtcars_tidy_groupings |> 
    group_by(vs, property_group) |>
    heatmap(
        `Car name`, Property, Value ,   
        scale = "row",
        palette_grouping = list(
            
            # For first grouping (vs)
            c("#66C2A5", "#FC8D62"), 
            
            # For second grouping (property_group)
            c("#b58b4c", "#74a6aa")
        )
    ) |>
    add_tile(hp)
图片

Multiple groupings and annotations

tidyHeatmap::pasilla |>
    group_by(location, type) |>
    heatmap(
        .column = sample,
        .row = symbol,
        .value = `count normalised adjusted`,   
        scale = "row"
    ) |>
    add_tile(condition) |>
    add_tile(activation)
图片

小结

从上面的流程我们可以看出tidyHeatmap的使用非常简单,而且出的图也是很美观的,使用者也可以根据需要选择其它配色。其实它的功能还远远不止于此,Immugent会在下一期推文中介绍有关tidyHeatmap包的其它个性化使用。

好啦,本期分享到这就结束了,我们下期再会~~

有关tidyHeatmap(一):带你绘制高端热图的更多相关文章

  1. ruby - 在 Ruby 中绘制点和矩形 - 2

    我正在寻找一种简单的方法来绘制大约10个点和矩形,以便能够查看我的算法哪里出了问题。我查看了gnuplot,但似乎绘制矩形特别糟糕。 最佳答案 SVG(MDNTutorial)是一种非常简单的基于文本(XML)的格式,您可以使用Ruby轻松生成它,而无需任何SVG库,并可以在任何现代Web浏览器中查看。这是一个示例:通过字符串插值的SVG点points=(0..5).map{[rand(100)-50,rand(100)-50]}puts#{points.map{|x,y|""}.join("\n")}ENDSVG输出:http:/

  2. javascript - 如何动画绘制一系列线段 - 2

    我想画一个点,大约1秒后我想画下一个点。这是否可能:我已经试过了:functionsimulate(i){setTimeout(function(){drawPoint(vis,i,i);},1000);}for(vari=1;i不幸的是,这是行不通的。它只是立即绘制整条线。 最佳答案 这是行不通的,因为for循环将立即运行到结束,setTimeouts将被同时调度,所有函数将同时触发。取而代之的是,这样做:vari=1;(functionloop(){if(i++>200)return;setTimeout(function(){

  3. javascript - 在谷歌地图上自由绘制 - 2

    我正在使用GoogleMapsAPIV3在Googlemap中绘制一些自由形式的多边形,而不是标准库附带的标准点击多边形。一切都很好。问题:多边形生成大量可编辑点。如何在需要时简化多边形并创建可编辑点?这里是我的代码:varlatlng=newgoogle.maps.LatLng(46.779231,6.659431);varoptions={center:latlng,zoom:19,mapTypeId:google.maps.MapTypeId.ROADMAP,draggable:false};varmap=newgoogle.maps.Map(document.getElemen

  4. javascript - Highcharts 绘制列高度的倒数 - 2

    我正在尝试绘制一个分类的多轴排名柱形图。排名第一的应该是最高的列,最低的排名应该是最短的。基本上我希望条形的高度是倒数。非常接近:varplayer_name_array=["AaronRodgers","AndrewLuck","DrewBrees","RussellWilson","PeytonManning","RyanTannehill","TonyRomo","MattRyan","CamNewton","BenRoethlisberger","EliManning","PhilipRivers","ColinKaepernick","TeddyBridgewater","M

  5. javascript - 谷歌地图绘制两点之间的路线 - 2

    我编写了这个无辜的javascript代码,它允许用户创建两个标记并绘制它们之间的路线。它不起作用,相反,它给出了一个奇怪的错误:UncaughtTypeError:Cannotreadproperty'ya'ofundefined有人可以告诉我这里出了什么问题吗://calleduponaclickGEvent.addListener(map,"click",function(overlay,point){if(isCreateHeadPoint){//addtheheadmarkerheadMarker=newGMarker(point,{icon:redIcon,title:'H

  6. javascript - 如何在 Fabric.js 中绘制圆弧 - 2

    我正在使用Fabric.js,我想在Canvas上绘制弧线。我能找到的最接近的形状是Circle形状。当然,这只能让我画一个圆,而不是像跨越45°或180°的弧。有没有办法用Fabric.js来完成这个?如果没有,有没有办法获取底层上下文,然后创建弧并允许fabric管理它?保留Fabric.js提供的选择和缩放功能很重要。 最佳答案 在最新版本的FabricJSforcircle中添加了startAngle和endAngle属性。https://github.com/kangax/fabric.js/pull/1675varcan

  7. javascript - 在固定节点之间绘制多个链接 - 2

    我有一个力导向图,每个节点之间都有链接。现在一些节点对有多个相互连接的链接。我找到了这个例子:Drawingmultipleedgesbetweentwonodeswithd3.我觉得这很管用。但是如果你有固定的节点并拖动,路径最终会相互重叠。我整理了这个例子的编辑版本:http://jsfiddle.net/thatOneGuy/7HZcR/502/单击按钮固定节点并四处移动它们以了解我的意思。计算弧度的代码://sortlinksbysource,thentargetlinks.sort(function(a,b){if(a.source>b.source){return1;}el

  8. javascript - 将组件重新绘制为 PNG - 2

    我目前有一个Recharts组件,我想将其导出为PNG文件。(this.currentChart=chart)}width={this.state.width}height={this.state.height}data={this.testData}margin={{top:5,right:30,left:20,bottom:5}}>;但我不确定图书馆是否直接支持这一点。我有一个想法,涉及使用Canvas和2D渲染上下文让我接近解决方案,如MDN中所述。但是,我不确定将HTML元素(或React组件)呈现为Canvas以实现此解决方案的通用方法。我可能做错了这一切,我将不胜感激!

  9. javascript - d3.js 使用极坐标绘制元素 - 2

    我是d3.js的新手,不确定要使用哪个d3功能。我需要围绕原点(在一个圆圈中)同心放置一组元素。svg.selectAll('circle').each(function(){d3.select(this).attr('cx',r*Math.cos(theta)).attr('cy',r*Math.sin(theta));theta+=thetaInc;});所以与其像上面的代码那样做一些乏味的事情,d3的简短方法是什么? 最佳答案 执行此操作的d3方法是传入数据并根据数据的索引计算位置,即类似于vartheta=2*Math.PI

  10. javascript - 在 FabricJS 中绘制一条波浪线 - 2

    我正在使用FabricJS创建用于绘制特定线条和形状的Canvas。其中一条线是带箭头的波浪线,类似这样:我已经成功地创建了一个带有箭头端点的直线版本,但找不到任何关于如何创建波浪线的示例。用户可以根据需要绘制线,因此线中“峰”和“谷”的数量需要相应地调整(像上图这样的短线可能有4个峰,但两倍长度的线会有8个峰,不仅仅是较短线的拉伸(stretch)版本)。这是我用来绘制带有箭头端点的直线的代码。请注意,线的起点是在mousedown上绘制的,终点是在mouseup上绘制的。importLineWithArrowfrom'./LineWithArrow';drawLineWithArr

随机推荐