手动创建看起来像热图颜色键的对象

时间:2015-10-01 20:57:46

标签: r layout graphics key

我正在尝试为热图创建一个密钥,但据我所知,我不能使用现有工具添加图例,因为我自己生成了颜色(我手动转动)一个缩放变量为短彩虹的rgb值([255,0,0]到[0,0,255])。

基本上,我想要做的就是使用最右边的第10个屏幕来创建一个包含这10种颜色的矩形:"#0000FF","#0072FF",&#34 ;#00E3FF","#00FFAA","#00FF38","#39FF00","#AAFF00",&#34 ;#FFE200","#FF7100","#FF0000"

带有三个数字标签的

- 0,max / 2和max

本质上,我想手动生成一个看起来像基本热图颜色键的对象。

据我所知,split.screen只能将屏幕分成两半,这不是我想要的。我想要的图形我已经知道如何生成占据最左边90%的屏幕,我希望这个彩色矩形占据其他10%。

感谢。

编辑:我非常感谢关于最佳方式的建议 - 说,我仍然想知道最初的方法来完成最初的任务 - 手工制作传奇;我已经能够生成我正在寻找的精确热图图形 - 虚假着色并不是我所拥有的ggplot的唯一问题 - 这只是说服我切换的最终因素。我需要一个非ggplot解决方案。

编辑#2:这接近我正在寻找的解决方案,除了这最多只能达到10而不是接受最大值作为参数(我将在多个数据集上运行此代码,所有这些都有不同的最大值 - 我希望图例能够反映这一点。此外,如果我更改图表的大小,则键会分离为断开连接的方块。

1 个答案:

答案 0 :(得分:0)

查看布局功能(link)。我想你想要这样的东西:

layout(matrix(c(1,2), 1, 2, byrow = TRUE), widths=c(9,1))
## plot heatmap
## plot legend

我还建议使用ggplot2包和geom_tile函数,它将为您处理所有这些。

假设您的数据位于具有x和y坐标以及热图值的数据框中(例如gdat <- data.frame(x_coord=c(1,2,...), y_coord=c(1,1,...), val=c(6,2,...)))那么您应该能够使用以下ggplot命令生成所需的热图图:

ggplot(gdat) + geom_tile(aes(x=x_coord, y=y_coord, fill=val)) + 
    scale_fill_gradient(low="#0000FF", high="#FF0000")

要将数据转换为以下格式,您可能需要查看非常有用的reshape2包。

给定一个脚本没有ggplot对这个答案的限制是如何用基础R生成图。

colors <- c("#0000FF", "#0072FF", "#00E3FF", "#00FFAA", "#00FF38",
            "#39FF00", "#AAFF00", "#FFE200", "#FF7100", "#FF0000")
layout(matrix(c(1,2), 1, 2, byrow = TRUE), widths=c(9,1))
plot(rnorm(20), rnorm(20), col=sample(colors, 20, replace=TRUE))
par(mar=c(0,0,0,0))
plot(x=rep(1,10), y=1:10, col=colors, pch=15, cex=7.1)

您可能需要调整设备的cex。