如何在 R 中的主热图旁边添加额外的单列热图

2024-02-08

我有以下脚本:

library("gplots")
mydata <- mtcars
mydata.nr <- nrow(mydata)
mydata.newval <-  data.frame(row.names=rownames(mydata),new.val=-log(runif(mydata.nr)))

# Functions
hclustfunc <- function(x) hclust(x, method="complete")
distfunc <- function(x) dist(x,method="euclidean")

# Set colors
hmcols <- rev(redgreen(256));

# Plot the scaled data
heatmap.2(as.matrix(mydata),dendrogram="row",scale="row",col=hmcols,trace="none", margin=c(8,9), hclust=hclustfunc,distfun=distfunc);

Which generate the following heatmap: enter image description here

现在给出一个新的 data.frame,其中包含每辆车的新值:

mydata.nr <- nrow(mydata)
mydata.newval <-  data.frame(row.names=rownames(mydata),new.val=-log(runif(mydata.nr)))

我想创建一个单列热图,其渐变灰色位于行名称旁边。 如何在 R heatmap.2 中实现这一目标?


这是你想要的吗?您可以使用RowSideColors将列添加到热图一侧的选项。

new.vals = mydata.newval[,1]
mydata.newval$scaled = ( new.vals - min(new.vals) ) / 
                       ( max(new.vals) - min(new.vals) )
mydata.newval$gray = gray( mydata.newval$scaled )

heatmap.2( as.matrix(mydata), 
           dendrogram = "row", scale = "row",
           col = hmcols, trace = "none", 
           margin = c(8,9), 
           hclust = hclustfunc, distfun = distfunc,
           RowSideColors=mydata.newval$gray )

如果您想要热图和标签之间的灰色列,则没有简单的方法 这样做的方法heatmap.2;我不认为它是为 此类目的。将其组合在一起的一种方法是制作灰度值 从 10 到 11(或超出其余数据范围的值)。然后 您可以更改映射到中断的颜色(请参阅here https://stackoverflow.com/questions/20535635/how-to-assign-your-color-scale-on-raw-data-in-heatmap-2)。然而,这 会让你的钥匙看起来很时髦。

# heatmap.2 does the clustering BEFORE the scaling. 
# Clustering after scaling might give different results
# heatmap.2 also reorders the dendrogram according to rowMeans.
# (Code copied directly from the heatmap.2 function)
x = as.matrix(mydata)
Rowv = rowMeans(x, na.rm = TRUE)
hcr = hclustfunc(distfunc(x))
ddr = as.dendrogram(hcr)
ddr = reorder(ddr, Rowv) # the row dendrogram

# Scale the data as heatmap.2 does
rm = rowMeans(x, na.rm = TRUE)
x = sweep(x, 1, rm)
sx =  apply(x, 1, sd, na.rm = TRUE)
x = sweep(x, 1, sx, "/")

# add the new data as a column
new.vals = mydata.newval[,1]
new.vals.scaled = ( new.vals - min(new.vals) ) / 
                  ( max(new.vals) - min(new.vals) ) # scaled from 0 to 1
x = cbind( x, gray = max(x) + new.vals.scaled + 0.1 )

# make the custom breaks and colors
edge = max(abs(x-1.1))
breaks = seq(-edge,edge+1.1,length.out=1000)
gradient1 = greenred( sum( breaks[-length(breaks)] <= edge ) )
gradient2 = colorpanel( sum( breaks[-length(breaks)] > edge ), "white", "black" )
hm.colors = c(gradient1,gradient2)

hm = heatmap.2( x, col=hm.colors, breaks=breaks,
           scale="none", 
           dendrogram="row", Rowv=ddr,
           trace="none", margins=c(8,9) )

虽然这个黑客有效,但我会寻找一个更强大的解决方案,使用更灵活的包,使用不同的视口grid包裹。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 R 中的主热图旁边添加额外的单列热图 的相关文章

随机推荐

  • Spring boot - 多数据库访问(MYSQL)

    我已经花了很长时间来解决我的问题 但找不到适合我的问题的解决方案 我需要顺序访问不同的数据库 我尝试更改数据库的链接 如下面的代码所示 public static void changeDB String dbname throws IOE
  • 用户名和密码可以通过 URL 参数通过 HTTPS 安全发送吗?

    昨天 我和一位同事就通过 URL 参数发送登录凭据作为身份验证手段是否安全进行了激烈的争论 他正确地指出 HTTPS 在向服务器端发送请求之前会加密 URL 中的所有非主机名 端口字符 然而 我仍然认为这里存在一些边缘情况 可以窃取这些凭据
  • 已弃用 GCC 标头搜索路径

    我发现了一个不寻常的 C makefile 设置 它依赖于 GCC 的一个已弃用的功能 该功能似乎没有现代替代品 该系统需要在包含本地头文件之前对其进行预处理或 烹饪 makefile 会处理这个问题 并将煮熟的版本放在本地 prepare
  • hapi fhir 弹性搜索如何配置

    我正在使用 hapi fhir v5 1 0 和 jpa 服务器 hapi fhir jpa server starter 根据描述 该版本包含用于文本搜索的弹性搜索库 我如何在这里配置弹性服务器 我看到一些条目properties文件并配
  • 让形状始终位于首页

    我正在为 Word 开发 VSTO 应用程序加载项 希望使形状始终位于首页的固定位置 有没有办法在不主动监视形状状态的情况下做到这一点 也欢迎回答 这是不可能完成的 并解释清楚原因 如果您将形状放入页眉并选中 DifferentFirstP
  • Joomla 的 ASP.NET 版本 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Task.Run(Action, CancellationToken) 何时抛出 TaskCanceledException?

    根据文档 http msdn microsoft com en us library hh160373 v vs 110 aspx Task Run Action CancellationToken throws TaskCanceledE
  • 更新 iOS 徽章而不推送通知

    我见过一些待办事项应用程序在午夜更新其应用程序徽章 始终显示正确的到期任务数量 他们这样做without使用推送通知 所以我的问题是 他们是如何做到这一点的 他们是否使用本地通知 如果是 当设备关闭时这些通知会被调用吗 我有点困惑 希望得到
  • Django:按元组的第一个值排序

    我有一个 7 元组 POSSIBILITIES 1 Something 2 Something else 现在我有一个IntegerField with choices在具有上面列出的可能性的模型中 class Something mode
  • 在 Spark Java 中将文本文件转换为序列格式

    在 Spark Java 中 如何将文本文件转换为序列文件 以下是我的代码 SparkConf sparkConf new SparkConf setAppName txt2seq sparkConf setMaster local set
  • size_t 和 off_t 的用法有什么区别?

    除了每种类型可以容纳的值的大小之外 还有哪些主要区别usage之间size t and off t 这只是一个惯例吗size t类型用于绝对大小和off t类型用于偏移 还是比这更深入 我正在编写一个包装类来启用使用写入大文件mmap我想知
  • Laravel Auth 用于登录和注册的外部数据

    我正在使用 Laravel 5 2 Auth 系统来执行以下命令 php artisan make auth 虽然这完全可以正常工作 但我的目标是使用外部 API 来执行登录 注册和更改密码 同时仍然能够使用 Auth 类的核心功能 以登录
  • 如何在 Vim 中查找变量的所有出现位置?

    在vim中 如何查找某个目录下的文件中所有出现的变量 我知道 vimgrep 有时可以工作 但它只查找文本 如果其他类具有同名变量并且我只想要特定类下的变量 则它不起作用 我应该怎么办 或者我应该换一个 IDE 当您已经拥有一个 IDE 时
  • SchemaFactory 不支持平台级别 8 中的 W3C XML Schema?

    使用 Android SDK 纯空 Activity 中的以下代码会失败 Override protected void onStart super onStart SchemaFactory schemaFactory SchemaFac
  • 读取文本文件直至某个字符

    这是我的困境 我有一个文件 希望读入所有字符 直到程序遇到 为止 并忽略 之后该行上的所有内容 例如 0 4001232 0 评论 丢弃 这很令人沮丧 因为感觉有一个非常简单的解决方案 谢谢 FILE f fopen file txt r
  • 导入适用于 Python 2.7 但不适用于 Python 3.4 的模块

    我之前一直在 Python 2 7 中使用 PyCharm 并且能够导入模块sklearn 它是通过安装的sudo apt get install python sklearn 不过 我现在已更改 PyCharm 中的设置以使用 Pytho
  • 为什么这个 SQL 脚本会这样工作?

    我正在从 SQL Server 2005 的表中提取电子邮件地址记录 并希望构建一个字符串用作 recipients列出与sp send dbmail 该表有一个名为 EmailAddress 的字段 表中有 10 条记录 我正在这样做 D
  • Android Studio 无法识别源文件夹

    我使用标准 Android Studio 目录结构 并创建了不同的构建类型 buildTypes debug runProguard false packageNameSuffix debug signingConfig signingCo
  • 为什么我不能通过 DLL/C-Connect 将 UninterpretedBytes 传递给 void*?

    我想将 UnterpretedBytes 传递给外部库 这样说 MyLibrary gt gt foo buf len len
  • 如何在 R 中的主热图旁边添加额外的单列热图

    我有以下脚本 library gplots mydata lt mtcars mydata nr lt nrow mydata mydata newval lt data frame row names rownames mydata ne